Pandas join和merge的区别是什么
在本文中,我们将介绍Pandas中join和merge的区别,以及它们在数据处理中的使用方法和示例。
阅读更多:Pandas 教程
join和merge的基本概念
在Pandas中,join和merge都是用于合并不同DataFrame的函数。它们的主要区别在于它们操作的数据集,以及合并方法的选择。
join函数是在基于索引的情况下,将两个DataFrame合并在一起。举个例子,如果我们有两个DataFrame的索引相同,我们可以使用join函数将它们合并在一起。默认情况下,join使用的是左外部合并,也就是说,它将把左边的DataFrame作为基础,将右边的DataFrame合并到左边的DataFrame上去。如果索引不同,Pandas join函数也可以根据列名进行合并。
merge函数是用于基于列的情况下,将两个DataFrame合并在一起。例如,我们有两个DataFrame,分别包含客户姓名和客户订单,我们可以使用merge函数以客户姓名作为关键字将两个DataFrame合并在一起。merge函数不仅支持内连接和外连接,也支持左连接、右连接、和交叉连接。
join的示例
我们用两个示例来演示join函数的使用。
第一个示例中,我们有两个DataFrame,其中一个有一个单独的列,另一个有两个列,我们可以使用join函数将它们合并在一起:
import pandas as pd
# 创建两个DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
df2 = pd.DataFrame({'B': ['B2', 'B3', 'B6', 'B7'],
'D': ['D2', 'D3', 'D6', 'D7'],
'E': ['E2', 'E3', 'E6', 'E7']})
# 按照B列进行join
result = df1.join(df2, lsuffix='a', rsuffix='b', how='inner', on='B')
print(result)
在上面的代码中,我们用join函数按照B列将两个DataFrame实现了内部连接。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:
A B C D_a Bb D_b E
2 A2 B2 C2 D2 B2 D2 E2
3 A3 B3 C3 D3 B3 D3 E3
第二个示例中,我们有两个DataFrame,其中一个有一个索引,另一个有两个索引,我们可以使用join函数将它们合并在一起:
import pandas as pd
# 创建两个DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']},
index=['I0', 'I1', 'I2', 'I3'])
df2 = pd.DataFrame({'E': ['E2', 'E3', 'E6', 'E7'],
'F': ['F2', 'F3', 'F6', 'F7']},
index=['I2', 'I3', 'I6', 'I7'])
# 按照索引进行join
result = df1.join(df2, lsuffix='a', rsuffix='b', how='outer')
print(result)
在上面的代码中,我们用join函数按照索引将两个DataFrame实现了左外部合并。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:
A B C D Eb F
I0 A0 B0 C0 D0 NaN NaN
I1 A1 B1 C1 D1 NaN NaN
I2 A2 B2 C2 D2 E2 F2
I3 A3 B3 C3 D3 E3 F3
I6 NaN NaN NaN NaN E6 F6
I7 NaN NaN NaN NaN E7 F7
merge的示例
我们用两个示例来演示merge函数的使用。
第一个示例中,我们有两个DataFrame,一个包含客户姓名和客户订单ID,另一个包含客户订单ID和订单金额,我们可以使用merge函数将它们合并在一起:
import pandas as pd
# 创建两个DataFrame
df1 = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'name': ['Alice', 'Bob', 'Charlie', 'David']})
df2 = pd.DataFrame({'key': ['K2', 'K2', 'K3', 'K4'],
'order_id': ['O1', 'O2', 'O3', 'O4'],
'amount': [100, 200, 300, 400]})
# 按照key进行merge
result = pd.merge(df1, df2, on='key', how='left')
print(result)
在上面的代码中,我们用merge函数按照key列将两个DataFrame实现了左外部连接。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:
key name order_id amount
0 K0 Alice NaN NaN
1 K1 Bob NaN NaN
2 K2 Charlie O1 100.0
3 K2 Charlie O2 200.0
4 K3 David O3 300.0
第二个示例中,我们有两个DataFrame,一个包含学生姓名和科目成绩,另一个包含学生姓名和年级班级信息,我们可以使用merge函数将它们合并在一起,并使用两个关键字作为连接:
import pandas as pd
# 创建两个DataFrame
df1 = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
'subject': ['Math', 'English', 'Science', 'History'],
'score': [90, 80, 85, 92]})
df2 = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David'],
'grade': [9, 10, 9, 11],
'class': ['A', 'B', 'A', 'C']})
# 按照name和年级进行merge
result = pd.merge(df1, df2, on=['name', 'grade'])
print(result)
在上面的代码中,我们用merge函数按照name和grade列将两个DataFrame实现了内部连接。我们将df1命名为左侧DataFrame,将df2命名为右侧DataFrame,结果如下:
name subject score grade class
0 Alice Math 90 9 A
1 Bob English 80 10 B
2 Charlie Science 85 9 A
3 David History 92 11 C
总结
相比之下,join函数更适用于基于索引的DataFrame操作,而merge函数更适用于基于列的DataFrame操作。具体选择哪个函数应该根据特定的需求来决定。对于Pandas初学者来说,学会使用这两个函数,可以大大提高数据处理的效率。
极客教程