Pandas中join和merge的区别是什么
Pandas提供了各种设施,可以轻松地将Series或DataFrame与各种索引的集合逻辑和连接/合并类型的操作中的关系代数功能结合起来。
连接和合并都可以用来合并两个数据框架,但是连接方法是根据两个数据框架的索引来合并的,而合并方法则更加灵活,允许我们在索引旁边指定两个数据框架的连接列。
让我们首先创建两个数据框来展示这两种方法的效果。
import pandas as pd
# Creating the two dataframes
left = pd.DataFrame([['a', 1], ['b', 2]], list('XY'), list('PQ'))
right = pd.DataFrame([['c', 3], ['d', 4]], list('XY'), list('PR'))
输出:

现在让我们逐一看看这两种方法对数据帧的影响。
join
连接方法需要两个数据框架并在它们的索引上进行连接(技术上,你可以为左边的数据框架选择要连接的列)。如果有重叠的列,连接将希望你在左边数据框架的重叠列名上添加一个后缀。我们的两个数据框架确实有一个重叠的列名P。
示例 :
joined_df = left.join(right, lsuffix='_')
print(joined_df)
输出 :

注意索引被保留了,我们有四列。我们也可以用参数_on _单独指定左边数据框架的一个特定列作为连接键,但它仍然会使用右边的索引。
示例 :
joined_df2 = left.reset_index().join(right, on='index', lsuffix='_')
print(joined_df2)
输出 :

merge
在基本层面上,合并或多或少地做了与连接相同的事情。这两种方法都是用来将两个数据框架结合在一起,但是merge的功能更多,它需要指定列作为合并键。我们可以用参数_on, _指定重叠的列,也可以用_left_on _和_right_on _参数分别指定。
示例 :
merged_df = left.merge(right, on='P', how='outer')
print(merged_df)
输出 :

在这里,注意到合并方法破坏了索引。
我们可以用_left_index _或_right_index _参数明确指定我们是根据索引来合并的。
示例 :
merged_df = left.merge(right, left_index=True,
right_index=True, suffixes=['_', ''])
print(merged_df)
输出 :

极客教程