Pandas模块包含各种功能,可以在数据框上执行各种操作,如join,concatenate,delete,add等。在本文中,我们将讨论可以在Pandas数据框上执行的各种类型的join操作。Pandas中有五种类型的Join。
为了理解不同类型的连接,我们将首先创建两个DataFrame,即a和b。
Dataframe a:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# printing the dataframe
a
DataFrame b:
# importing pandas
import pandas as pd
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# printing the dataframe
b
我们将使用这两个数据框来理解不同类型的连接。
Pandas 内连接
内连接是您将使用的最常见的连接类型。它返回一个Dataframe,其中只有那些具有共同特征的行。这类似于两个集合的交集。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# inner join
df = pd.merge(a, b, on='id', how='inner')
# display dataframe
df
Pandas 左连接
使用左连接,将显示第一个数据框中的所有记录,而不管第一个数据框中的键是否可以在第二个数据框中找到。然而,对于第二个数据框,只有在第二个数据框中可以在第一个数据框中找到的键的记录才会显示。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# left outer join
df = pd.merge(a, b, on='id', how='left')
# display dataframe
df
Pandas 右连接
对于右连接,将显示第二个DataFrame中的所有记录。但是,只有第一个数据框中的键可以在第二个数据框中找到的记录才会显示。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# right outer join
df = pd.merge(a, b, on='id', how='right')
# display dataframe
df
Pandas全连接
一个全连接返回来自左边Dataframe的所有行,以及来自右边Dataframe的所有行,并在可能的情况下匹配行,在其他地方使用NaN。但是如果DataFrame是完整的,那么我们得到相同的输出。
示例:
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# full outer join
df = pd.merge(a, b, on='id', how='outer')
# display dataframe
df
Pandas 索引连接
要在索引上合并数据框,请将left_index和right_index参数传递为True,即使用默认的Inner Join在索引上合并两个数据框。
# importing pandas
import pandas as pd
# Creating dataframe a
a = pd.DataFrame()
# Creating Dictionary
d = {'id': [1, 2, 10, 12],
'val1': ['a', 'b', 'c', 'd']}
a = pd.DataFrame(d)
# Creating dataframe b
b = pd.DataFrame()
# Creating dictionary
d = {'id': [1, 2, 9, 8],
'val1': ['p', 'q', 'r', 's']}
b = pd.DataFrame(d)
# index join
df = pd.merge(a, b, left_index=True, right_index=True)
# display dataframe
df