Pandas 中的 join 和 merge 有什么区别?
在连接/合并类型操作的情况下,Pandas 提供了各种工具,可以轻松地将 Series 或 DataFrame 与索引和关系代数功能的各种集合逻辑相结合。
join 和 merge 都可用于组合两个数据帧,但 join 方法根据它们的索引组合两个数据帧,而合并方法更通用,允许我们指定索引旁边的列以连接两个数据帧。
我们先来创建两个数据框来展示两种方法的效果。
Python3
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'))
Python3
joined_df = left.join(right, lsuffix='_')
print(joined_df)
Python3
joined_df2 = left.reset_index().join(right, on='index', lsuffix='_')
print(joined_df2)
Python3
merged_df = left.merge(right, on='P', how='outer')
print(merged_df)
Python3
merged_df = left.merge(right, left_index=True,
right_index=True, suffixes=['_', ''])
print(merged_df)
输出:
现在让我们一一看看这两种方法对数据帧的影响。
加入
join方法需要两个数据框并将它们连接到它们的索引上(从技术上讲,您可以选择要连接左侧数据框的列)。如果有重叠的列,连接将要求您从左侧数据框中向重叠的列名称添加后缀。我们的两个数据框确实有一个重叠的列名 P。
例子 :
蟒蛇3
joined_df = left.join(right, lsuffix='_')
print(joined_df)
输出 :
请注意,索引被保留,我们有四列。n我们也可以使用参数on单独指定左侧数据帧的特定列以用作连接键,但它仍将使用右侧的索引。
例子 :
蟒蛇3
joined_df2 = left.reset_index().join(right, on='index', lsuffix='_')
print(joined_df2)
输出 :
合并
在基本层面上, merge或多或少与 join 做同样的事情。这两种方法都用于将两个数据帧组合在一起,但 merge 更通用,它需要将列指定为合并键。我们可以用on参数指定重叠列,也可以用left_on和right_on参数分别指定。
例子 :
蟒蛇3
merged_df = left.merge(right, on='P', how='outer')
print(merged_df)
输出 :
在这里,请注意合并方法破坏了索引。
我们可以使用left_index或right_index参数明确指定我们基于索引进行合并。
例子 :
蟒蛇3
merged_df = left.merge(right, left_index=True,
right_index=True, suffixes=['_', ''])
print(merged_df)
输出 :