📜  结合 2 个数据框 pandas - Python (1)

📅  最后修改于: 2023-12-03 15:41:15.339000             🧑  作者: Mango

结合 2 个数据框 pandas - Python

当我们需要合并两个表格时,我们通常需要使用 Pandas 库来完成这个任务。Pandas 是一个功能强大的 Python 库,它提供了许多数据操作和数据分析的函数和方法。在 Pandas 中,我们可以使用 merge() 或 join() 函数来将两个不同的 DataFrame 合并在一起。

merge() 和 join() 的区别

Pandas 中有两个函数可以将两个不同的 DataFrame 合并在一起,它们分别是 merge() 和 join() 函数。这两个函数的作用都是将两个 DataFrame 合并在一起,并且它们的用法也很相似。但是,它们的区别在于:

  • join() 函数只能基于索引将两个 DataFrame 合并在一起,而 merge() 函数可以基于任意列来合并两个 DataFrame。

  • join() 函数只能进行左连接或者右连接,而 merge() 函数可以进行多种连接方式,如内连接、左连接、右连接和外连接等。

因此,在实际使用中,我们通常会选择使用具有更多连接方式和更高灵活性的 merge() 函数。

merge() 函数的用法

merge() 函数主要用于将两个 DataFrame 根据某些列进行匹配,然后将它们合并在一起。merge() 函数的语法如下:

merged_data = pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

其中,参数含义如下:

  • left 和 right:要合并的两个 DataFrame。

  • how:连接方式,支持 inner、outer、left 和 right 四种方式。

  • on:合并的列名,必须在两个 DataFrame 中都存在。

  • left_on 和 right_on:左表和右表的连接键名。若 left 和 right 的连接键名不同,则需要指定这两个键名分别对应 left_on 和 right_on。

  • left_index 和 right_index:是否使用索引来作为连接键。

  • sort:是否按连接键排序。

  • suffixes:两个 DataFrame 中有同名的列时,添加后缀以区别。

  • copy:是否复制数据。

  • indicator:是否添加连接指示列。

  • validate:检查合并是否正确的函数。

下面是一个 merge() 函数的示例:

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value': [1, 2, 3, 4]})
df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value': [5, 6, 7, 8]})

# 根据列名 key 合并 df1 和 df2
merged_data = pd.merge(df1, df2, on='key', how='inner')
print(merged_data)

在这个例子中,我们首先创建了两个 DataFrame,并且使用了相同的列名 key 和 value,用于将这两个 DataFrame 合并在一起。然后,我们使用 merge() 函数来合并这两个 DataFrame,根据列名 key 将它们进行匹配。最后,我们使用 inner 连接方式将两个 DataFrame 合并在一起,并且将结果输出到控制台中。

join() 函数的用法

join() 函数是 Pandas 提供的另一个将两个 DataFrame 合并在一起的方法,它主要用于基于索引将两个 DataFrame 合并在一起。join() 函数的语法如下:

joined_data = left.join(right, how='outer', lsuffix='_left', rsuffix='_right', sort=False)

其中,参数含义如下:

  • left 和 right:要合并的两个 DataFrame。

  • how:连接方式,支持 inner、outer、left 和 right 四种方式。

  • lsuffix 和 rsuffix:两个 DataFrame 中有同名的列时,添加后缀以区别。

  • sort:是否按索引排序。

下面是一个 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=[0, 1, 2, 3])
df2 = pd.DataFrame({'E': ['E0', 'E1', 'E2', 'E3'], 'F': ['F0', 'F1', 'F2', 'F3'], 'G': ['G0', 'G1', 'G2', 'G3'], 'H': ['H0', 'H1', 'H2', 'H3']}, index=[0, 1, 2, 3])

# 根据索引合并 df1 和 df2
joined_data = df1.join(df2)
print(joined_data)

在这个例子中,我们首先创建了两个 DataFrame,并且分别使用了 A、B、C 和 D 列,以及 E、F、G 和 H 列作为它们的列名。这两个 DataFrame 的索引是相同的,因此我们使用 join() 函数将它们根据索引合并在一起。最后,我们将结果输出到控制台中。

总结

merge() 函数和 join() 函数都可以用于将两个不同的 DataFrame 合并在一起,merge() 函数支持更多的连接方式和更高的灵活性,而 join() 函数只能用于基于索引将两个 DataFrame 合并在一起。在实际使用中,我们通常会根据具体的情况来选择使用合适的函数。