pandas dataframe merge使用方法

pandas dataframe merge使用方法

参考:pandas dataframe merge

Pandas 是一个强大的数据处理库,它提供了一种灵活的数据结构,可以方便地处理各种类型的数据。其中,DataFrame 是 Pandas 提供的一种二维表格型数据结构,非常适合于处理各种类型的数据,包括数值、字符、时间序列等。

在数据处理过程中,经常会遇到需要将两个或多个 DataFrame 进行合并的情况,这时就需要使用到 Pandas 提供的 merge 函数。merge 函数可以根据一个或多个键将不同 DataFrame 中的行连接起来,类似于 SQL 中的 JOIN 操作。

1. 基本用法

Pandas 的 merge 函数的基本语法如下:

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’,默认为 ‘inner’。on 参数指定了用于连接的列名,必须同时存在于两个 DataFrame 中。left_on 和 right_on 分别指定 left 和 right DataFrame 中用于连接的列。

下面我们通过一个简单的例子来说明 merge 函数的基本用法:

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key': ['K0', 'K1', 'K2']},
                   index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2'],
                    'key': ['K0', 'K2', 'K3']},
                   index=['K0', 'K2', 'K3'])

# 使用 merge 函数合并两个 DataFrame
result = pd.merge(df1, df2, on='key')

print(result)

Output:

pandas dataframe merge使用方法

2. 合并方式

如前所述,merge 函数的 how 参数可以指定合并的方式,包括 ‘inner’、’outer’、’left’、’right’。下面我们分别介绍这四种合并方式。

2.1 内连接(inner)

内连接是默认的合并方式,它只会保留两个 DataFrame 中键值相同的行。例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key': ['K0', 'K1', 'K2']})

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2'],
                    'key': ['K0', 'K2', 'K3']})

result = pd.merge(df1, df2, how='inner', on='key')

print(result)

Output:

pandas dataframe merge使用方法

2.2 外连接(outer)

外连接会保留两个 DataFrame 中所有的键值,如果某个键在某个 DataFrame 中不存在,那么结果中对应的值会被填充为 NaN。例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key': ['K0', 'K1', 'K2']})

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2'],
                    'key': ['K0', 'K2', 'K3']})

result = pd.merge(df1, df2, how='outer', on='key')

print(result)

Output:

pandas dataframe merge使用方法

2.3 左连接(left)

左连接会保留左侧 DataFrame 中所有的键值,如果某个键在右侧 DataFrame 中不存在,那么结果中对应的值会被填充为 NaN。例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key': ['K0', 'K1', 'K2']})

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2'],
                    'key': ['K0', 'K2', 'K3']})

result = pd.merge(df1, df2, how='left', on='key')

print(result)

Output:

pandas dataframe merge使用方法

2.4 右连接(right)

右连接会保留右侧 DataFrame 中所有的键值,如果某个键在左侧 DataFrame 中不存在,那么结果中对应的值会被填充为 NaN。例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key': ['K0', 'K1', 'K2']})

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2'],
                    'key': ['K0', 'K2', 'K3']})

result = pd.merge(df1, df2, how='right', on='key')

print(result)

Output:

pandas dataframe merge使用方法

3. 多键合并

在实际应用中,我们可能需要根据多个键来合并 DataFrame。这时,我们可以将这些键放在一个列表中,然后传递给 on 参数。例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key1': ['K0', 'K0', 'K1'],
                    'key2': ['K0', 'K1', 'K0']})

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2'],
                    'key1': ['K0', 'K1', 'K1'],
                    'key2': ['K0', 'K0', 'K0']})

result = pd.merge(df1, df2, on=['key1', 'key2'])

print(result)

Output:

pandas dataframe merge使用方法

4. 合并后的列名处理

如果两个 DataFrame 中有重名的列,merge 函数会自动在列名后添加后缀以区分它们。默认的后缀是 ‘_x’ 和 ‘_y’,我们也可以通过 suffixes 参数来自定义后缀。例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key': ['K0', 'K1', 'K2']})

df2 = pd.DataFrame({'B': ['B2', 'B3', 'B4'],
                    'C': ['C0', 'C1', 'C2'],
                    'key': ['K0', 'K2', 'K3']})

result = pd.merge(df1, df2, on='key', suffixes=('_df1', '_df2'))

print(result)

Output:

pandas dataframe merge使用方法

5. 使用索引进行合并

除了使用列进行合并,我们还可以使用索引进行合并。这时,我们需要将 left_index 或 right_index(或两者都)设置为 True。例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2']},
                   index=['K0', 'K1', 'K2'])

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2']},
                   index=['K0', 'K2', 'K3'])

result = pd.merge(df1, df2, left_index=True, right_index=True)

print(result)

Output:

pandas dataframe merge使用方法

6. 验证合并

在进行合并操作时,我们可以通过 validate 参数来检查合并是否正确。validate 参数可以接受以下几个值:

  • ‘one_to_one’:检查合并是否为一对一合并。
  • ‘one_to_many’:检查合并是否为一对多合并。
  • ‘many_to_one’:检查合并是否为多对一合并。
  • ‘many_to_many’:不进行任何检查。

例如:

import pandas as pd

df1 = pd.DataFrame({'A': ['A0', 'A1', 'A2'],
                    'B': ['B0', 'B1', 'B2'],
                    'key': ['K0', 'K1', 'K2']})

df2 = pd.DataFrame({'C': ['C0', 'C1', 'C2'],
                    'D': ['D0', 'D1', 'D2'],
                    'key': ['K0', 'K2', 'K3']})

result = pd.merge(df1, df2, on='key', validate='one_to_one')

print(result)

Output:

pandas dataframe merge使用方法

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程