📜  Pandas 中的 join 和 merge 有什么区别?

📅  最后修改于: 2022-05-13 01:54:56.649000             🧑  作者: Mango

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_onright_on参数分别指定。

例子 :

蟒蛇3

merged_df = left.merge(right, on='P', how='outer')
print(merged_df)

输出 :

在这里,请注意合并方法破坏了索引。

我们可以使用left_indexright_index参数明确指定我们基于索引进行合并。

例子 :

蟒蛇3

merged_df = left.merge(right, left_index=True,
                       right_index=True, suffixes=['_', ''])
print(merged_df)

输出 :