pandas dataframe merge使用方法

pandas dataframe merge使用方法

参考:pandas dataframe merge

pandas 是一个强大的数据处理库,它提供了大量的功能,可以帮助我们处理各种各样的数据。其中,mergepandas 中的一个重要功能,它可以帮助我们将两个或多个 DataFrame 合并成一个。在这篇文章中,我们将详细介绍 pandas dataframe merge 的使用方法。

1. 基本概念

在开始之前,我们首先需要了解一些基本概念。在 pandas 中,DataFrame 是一个二维的表格型数据结构,可以包含不同类型的列。mergepandas 中的一个函数,它可以根据一个或多个键将两个 DataFrame 的行连接起来。

下面是一个简单的示例:

import pandas as pd

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

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

result = pd.merge(df1, df2, left_on='key', right_index=True)
print(result)

Output:

pandas dataframe merge使用方法

在这个示例中,我们首先创建了两个 DataFrame,然后使用 merge 函数将它们合并。left_on='key' 表示我们使用 df1 的 ‘key’ 列作为键,right_index=True 表示我们使用 df2 的索引作为键。

2. 合并方式

pandas 提供了四种合并方式:’inner’、’outer’、’left’ 和 ‘right’。默认情况下,merge 使用 ‘inner’ 方式,也就是只保留两个 DataFrame 中键相同的行。

下面是一个 ‘inner’ 合并的示例:

import pandas as pd

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

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

result = pd.merge(df1, df2, left_on='key', right_index=True, how='inner')
print(result)

Output:

pandas dataframe merge使用方法

在这个示例中,我们使用 ‘inner’ 方式合并 df1df2,结果只包含 ‘K0’ 和 ‘K1’ 这两个键的行,因为只有这两个键在 df1df2 中都存在。

‘outer’ 合并方式会保留两个 DataFrame 中所有的键,如果某个键在一个 DataFrame 中存在,但在另一个 DataFrame 中不存在,那么结果中这个键的行,不存在的部分会被填充为 NaN

下面是一个 ‘outer’ 合并的示例:

import pandas as pd

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

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

result = pd.merge(df1, df2, left_on='key', right_index=True, how='outer')
print(result)

Output:

pandas dataframe merge使用方法

在这个示例中,我们使用 ‘outer’ 方式合并 df1df2,结果包含 ‘K0’、’K1’、’K2’ 和 ‘K3′ 这四个键的行,’K2’ 和 ‘K3’ 在 df1 中不存在,所以结果中这两个键的行,df1 的部分被填充为 NaN

‘left’ 合并方式会保留左边 DataFrame 中所有的键,如果某个键在左边 DataFrame 中存在,但在右边 DataFrame 中不存在,那么结果中这个键的行,右边 DataFrame 的部分会被填充为 NaN

下面是一个 ‘left’ 合并的示例:

import pandas as pd

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

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

result = pd.merge(df1, df2, left_on='key', right_index=True, how='left')
print(result)

Output:

pandas dataframe merge使用方法

在这个示例中,我们使用 ‘left’ 方式合并 df1df2,结果包含 ‘K0’ 和 ‘K1’ 这两个键的行,因为只有这两个键在 df1 中存在。

‘right’ 合并方式会保留右边 DataFrame 中所有的键,如果某个键在右边 DataFrame 中存在,但在左边 DataFrame 中不存在,那么结果中这个键的行,左边 DataFrame 的部分会被填充为 NaN

下面是一个 ‘right’ 合并的示例:

import pandas as pd

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

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

result = pd.merge(df1, df2, left_on='key', right_index=True, how='right')
print(result)

Output:

pandas dataframe merge使用方法

在这个示例中,我们使用 ‘right’ 方式合并 df1df2,结果包含 ‘K0’、’K1’、’K2’ 和 ‘K3′ 这四个键的行,’K2’ 和 ‘K3’ 在 df1 中不存在,所以结果中这两个键的行,df1 的部分被填充为 NaN

3. 多键合并

merge 函数也支持多键合并。我们可以使用一个列表来指定多个键,merge 函数会根据这些键的组合来合并 DataFrame

下面是一个多键合并的示例:

import pandas as pd

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

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

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

Output:

pandas dataframe merge使用方法

在这个示例中,我们使用了两个键 ‘key1’ 和 ‘key2’ 来合并 df1df2。结果中只包含那些在两个 DataFrame 中 ‘key1’ 和 ‘key2’ 的组合都存在的行。

4. 合并时的索引处理

在使用 merge 函数时,我们可以选择是否保留原始的索引。如果我们想保留原始的索引,可以设置 merge 函数的 left_indexright_index 参数为 True

下面是一个保留索引的示例:

import pandas as pd

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

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

result = pd.merge(df1, df2, left_index=True, right_index=True, how='outer')
print(result)

Output:

pandas dataframe merge使用方法

在这个示例中,我们设置了 left_index=Trueright_index=True,这表示我们使用 df1df2 的索引作为合并的键。结果中包含了所有在 df1df2 中出现的索引。

5. 使用 suffixes 参数处理重名列

当两个 DataFrame 中存在重名列时,merge 函数会自动为这些列添加后缀以区分它们。我们也可以通过设置 suffixes 参数来自定义这些后缀。

下面是一个处理重名列的示例:

import pandas as pd

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

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

result = pd.merge(df1, df2, on='key', suffixes=('_left', '_right'))
print(result)

Output:

pandas dataframe merge使用方法

在这个示例中,我们设置了 suffixes=('_left', '_right'),这表示在合并后的 DataFrame 中,来自 df1 的 ‘A’ 列将被重命名为 ‘A_left’,而来自 df2 的 ‘A’ 列将被重命名为 ‘A_right’。

6. 总结

在这篇文章中,我们详细介绍了 pandasmerge 函数的使用方法,包括基本的合并方式、多键合并、索引处理以及如何处理重名列。通过这些知识,你可以更灵活地处理和分析数据。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程