如何使用 pandas 的concat函数来合并两个 DataFrame

如何使用 pandas 的concat函数来合并两个 DataFrame

参考:pandas concat 2 dataframes

在数据分析和数据处理中,经常需要将多个数据集合并为一个更大的数据集。PandasPython 中一个强大的数据处理库,它提供了多种方式来合并数据,其中 concat() 函数是一个非常常用的工具,用于沿着一条轴将多个对象堆叠到一起。本文将详细介绍如何使用 pandasconcat() 函数来合并两个 DataFrame,并提供多个示例代码来展示不同的使用场景。

基本用法

pandas.concat() 可以将两个或多个 pandas 对象合并成一个。最简单的情况是将两个 DataFrame 纵向或横向拼接。

示例代码 1:基本纵向拼接

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({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7'],
    'D': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

# 使用 concat 进行纵向拼接
result = pd.concat([df1, df2])
print(result)

Output:

如何使用 pandas 的concat函数来合并两个 DataFrame

示例代码 2:基本横向拼接

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
}, index=[0, 1, 2, 3])

# 使用 concat 进行横向拼接
result = pd.concat([df1, df2], axis=1)
print(result)

Output:

如何使用 pandas 的concat函数来合并两个 DataFrame

处理索引

在使用 concat() 时,处理索引是一个重要的方面。默认情况下,concat() 会保留原始对象的索引,即使这导致索引重复也是如此。可以通过设置不同的参数来调整这种行为。

示例代码 3:忽略原始索引

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
}, index=[0, 1, 2, 3])

# 使用 concat 进行纵向拼接,忽略原始索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

如何使用 pandas 的concat函数来合并两个 DataFrame

示例代码 4:添加多级索引

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
}, index=[4, 5, 6, 7])

# 使用 concat 进行纵向拼接,添加多级索引
result = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result)

Output:

如何使用 pandas 的concat函数来合并两个 DataFrame

处理列不对齐

当合并的 DataFrame 列不完全对齐时,concat() 提供了多种处理方式。可以选择只保留共有的列,或者保留所有列,并为缺失的列填充 NaN。

示例代码 5:合并时列不对齐

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7']
}, index=[4, 5, 6, 7])

# 使用 concat 进行纵向拼接,处理列不对齐
result = pd.concat([df1, df2], sort=False)
print(result)

Output:

如何使用 pandas 的concat函数来合并两个 DataFrame

使用参数

concat() 函数提供了多个参数来控制合并的行为,如 axis 控制合并的轴,join 控制如何处理不在所有对象中出现的索引等。

示例代码 6:使用 join 控制合并方式

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7']
}, index=[4, 5, 6, 7])

# 使用 concat 进行纵向拼接,使用 join='inner' 只保留共有列
result = pd.concat([df1, df2], join='inner')
print(result)

Output:

如何使用 pandas 的concat函数来合并两个 DataFrame

总结

通过上述示例,我们可以看到 pandas.concat() 是一个非常灵活的工具,可以处理各种复杂的数据合并需求。无论是简单的纵向拼接、横向拼接,还是处理索引和列不对齐的情况,concat() 都能提供有效的解决方案。在实际的数据处理工作中,合理利用这些功能可以极大地提高工作效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程