如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

参考:pandas concat list of dataframes

在数据分析和数据处理中,经常需要将多个数据框(DataFrame)合并为一个单一的数据框。Pandas 提供了一个非常强大的函数 concat(),用于在轴向上合并多个对象。本文将详细介绍如何使用 Pandas 的 concat() 函数来合并一个列表中的多个 DataFrame,并提供多个示例代码来展示不同的使用场景。

1. 基本使用方法

concat() 函数的基本语法如下:

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
  • objs: 需要合并的 DataFrame 或 Series 的列表或字典。
  • axis: 合并的轴向,默认为0,表示纵向合并;设置为1表示横向合并。
  • join: 合并的方式,默认为 ‘outer’,表示取并集;’inner’ 表示取交集。
  • ignore_index: 是否忽略原有的索引。
  • keys: 用于创建层次化索引的值。
  • verify_integrity: 检查新的合并的 DataFrame 是否包含重复的索引。
  • sort: 是否在合并时对索引进行排序。
  • copy: 是否复制数据,默认为 True。

示例代码 1:基本的纵向合并

import pandas as pd

# 创建数据框
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])

# 合并数据框
result = pd.concat([df1, df2])
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

示例代码 2:横向合并

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 横向合并数据框
result = pd.concat([df1, df2], axis=1)
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

示例代码 3:使用 ignore_index 参数

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 忽略原有索引,重新生成索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

示例代码 4:使用 keys 参数创建层次化索引

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 使用 keys 参数
result = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

2. 处理不同的列名

在实际的数据处理过程中,我们经常会遇到需要合并的 DataFrame 拥有不同的列名的情况。这时候,concat() 函数提供了多种参数来处理这种情况。

示例代码 5:合并具有不同列名的 DataFrame

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 合并数据框,使用外连接
result = pd.concat([df1, df2], axis=1, join='outer')
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

示例代码 6:使用内连接合并具有不同列名的 DataFrame

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 合并数据框,使用内连接
result = pd.concat([df1, df2], axis=1, join='inner')
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

3. 处理重复的索引

在合并多个 DataFrame 时,如果不处理索引,可能会出现重复索引的问题。concat() 函数提供了 verify_integrity 参数来检查是否有重复的索引。

示例代码 7:检查重复索引

import pandas as pd

# 创建数据框
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=[3, 4, 5, 6])  # 注意这里的索引3是重复的

# 尝试合并数据框,检查重复索引
try:
    result = pd.concat([df1, df2], verify_integrity=True)
    print(result)
except ValueError as e:
    print("Error:", e)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

4. 性能考虑

当合并大量的 DataFrame 时,性能成为一个重要的考虑因素。concat() 函数的 copy 参数可以用来控制是否复制数据,从而可能影响性能。

示例代码 8:控制数据复制以优化性能

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 合并数据框,不复制数据
result = pd.concat([df1, df2], copy=False)
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

5. 使用场景和示例

在数据处理的不同阶段,我们可能会遇到各种需要合并数据框的场景。以下是一些具体的使用场景和相应的示例代码。

示例代码 9:合并具有相同结构的多个数据框

假设我们有多个具有相同列的数据框,我们需要将它们合并成一个大的数据框。

import pandas as pd

# 创建多个数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3']
})

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7']
})

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10', 'A11'],
    'B': ['B8', 'B9', 'B10', 'B11'],
    'C': ['C8', 'C9', 'C10', 'C11']
})

# 合并数据框
result = pd.concat([df1, df2, df3])
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

示例代码 10:合并时添加源数据框的标识

在合并数据框时,有时候我们需要知道每行数据来自于哪个原始的数据框。

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 合并数据框,并标记来源
result = pd.concat([df1, df2], keys=['来源1', '来源2'])
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

示例代码 11:处理具有不同列并使用外连接的数据框

在实际应用中,我们可能需要合并结构不完全相同的数据框,并希望保留所有的列。

import pandas as pd

# 创建数据框
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

# 使用外连接合并数据框
result = pd.concat([df1, df2], join='outer')
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

示例代码 12:合并时保留原有索引

有时候在合并数据框时,我们需要保留原有的索引,这在后续的数据处理中可能会用到。

import pandas as pd

# 创建数据框
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])

# 合并数据框,保留原有索引
result = pd.concat([df1, df2], ignore_index=False)
print(result)

Output:

如何使用 Pandas 的concat函数来合并一个列表中的多个 DataFrame

以上示例展示了如何使用 Pandas 的 concat() 函数来处理不同的数据合并需求。通过调整参数,我们可以灵活地处理各种数据结构和需求,有效地进行数据整合和分析。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程