ZetCode

Pandas 数据合并

最后修改于 2025 年 2 月 25 日

Pandas 是一个强大的 Python 数据操作库。在处理多个数据集时,合并 DataFrame 是一项常见任务。本教程将通过实际示例介绍如何使用 Pandas 合并 DataFrame。

合并允许根据共同的列或索引将来自不同来源的数据组合起来。Pandas 提供了 mergejoin 等方法来执行这些操作。

内连接

本示例展示了如何使用 merge 执行内连接。

merge_inner.py
import pandas as pd

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'ID': [2, 3, 4],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

merged_df = pd.merge(df1, df2, on='ID', how='inner')

print(merged_df)

merge(df1, df2, on='ID', how='inner') 在 'ID' 列上执行内连接。仅包含两个 DataFrame 中 ID 匹配的行。

左连接

本示例演示了如何使用 merge 执行左连接。

merge_left.py
import pandas as pd

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'ID': [2, 3, 4],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

merged_df = pd.merge(df1, df2, on='ID', how='left')

print(merged_df)

merge(df1, df2, on='ID', how='left') 执行左连接。包含 df1 中的所有行,并添加 df2 中匹配的行。

右连接

本示例展示了如何使用 merge 执行右连接。

merge_right.py
import pandas as pd

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'ID': [2, 3, 4],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

merged_df = pd.merge(df1, df2, on='ID', how='right')

print(merged_df)

merge(df1, df2, on='ID', how='right') 执行右连接。包含 df2 中的所有行,并添加 df1 中匹配的行。

外连接

本示例演示了如何使用 merge 执行外连接。

merge_outer.py
import pandas as pd

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'ID': [2, 3, 4],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

merged_df = pd.merge(df1, df2, on='ID', how='outer')

print(merged_df)

merge(df1, df2, on='ID', how='outer') 执行外连接。包含两个 DataFrame 中的所有行,并将缺失值填充为 NaN。

基于多列进行合并

本示例展示了如何基于多列合并 DataFrame。

merge_multiple_columns.py
import pandas as pd

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Dept': ['HR', 'IT', 'Finance']
})

df2 = pd.DataFrame({
    'ID': [2, 3, 4],
    'Name': ['Bob', 'Charlie', 'David'],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

merged_df = pd.merge(df1, df2, on=['ID', 'Name'], how='inner')

print(merged_df)

merge(df1, df2, on=['ID', 'Name'], how='inner') 会同时基于 'ID' 和 'Name' 列进行合并。这对于更复杂的连接很有用。

合并具有不同列名的 DataFrame

本示例演示了如何合并具有不同列名的 DataFrame。

merge_different_columns.py
import pandas as pd

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'EmpID': [2, 3, 4],
    'City': ['New York', 'Los Angeles', 'Chicago']
})

merged_df = pd.merge(df1, df2, left_on='ID', right_on='EmpID', how='inner')

print(merged_df)

merge(df1, df2, left_on='ID', right_on='EmpID', how='inner') 使用不同的列名合并 DataFrame。当列名不匹配时,这很有用。

连接 DataFrame

本示例展示了如何使用 concat 连接 DataFrame。

concat_dataframes.py
import pandas as pd

df1 = pd.DataFrame({
    'ID': [1, 2, 3],
    'Name': ['Alice', 'Bob', 'Charlie']
})

df2 = pd.DataFrame({
    'ID': [4, 5, 6],
    'Name': ['David', 'Eve', 'Frank']
})

concatenated_df = pd.concat([df1, df2], ignore_index=True)

print(concatenated_df)

concat([df1, df2], ignore_index=True) 会垂直连接 DataFrame。ignore_index=True 参数会重置索引。

数据合并最佳实践

来源

Pandas merge 文档

在本文中,我们探讨了如何在 Pandas 中合并 DataFrame。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面有十多年的经验。

所有 Pandas 教程列表。