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

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

参考:pandas concat two dataframes

在数据分析和数据处理中,经常需要将不同的数据集合并为一个更大的数据集。Pandas 提供了多种方式来合并数据,其中 concat() 函数是一个非常强大的工具,用于在轴向上连接 Pandas 对象(如 Series 和 DataFrame)。本文将详细介绍如何使用 Pandas 的 concat() 函数来合并两个 DataFrame,并提供多个示例代码以展示其用法。

1. Pandas concat() 函数基础

Pandas 的 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/'index', 1/'columns'},默认为 0,即沿着索引轴连接。
  • join: {'inner', 'outer'},默认为 ‘outer’。’outer’ 表示取并集,’inner’ 表示取交集。
  • ignore_index: 布尔值,默认为 False。如果为 True,则不使用连接轴上的索引值。
  • keys: 用于形成连接轴上的层次化索引。
  • verify_integrity: 检查新连接的轴是否包含重复项。如果有重复,将引发异常。

示例代码 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])

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'],
    '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], axis=1)
print(result)

Output:

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

示例代码 3:内连接

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])

result = pd.concat([df1, df2], join='inner')
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'],
    '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], ignore_index=True)
print(result)

Output:

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

示例代码 5:使用键

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])

result = pd.concat([df1, df2], keys=['x', 'y'])
print(result)

Output:

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

2. 处理不同列名的 DataFrame

当两个 DataFrame 列名不同时,concat() 如何处理也是一个重要的问题。默认情况下,Pandas 会取所有出现的列的并集。

示例代码 6:列名不同时的外连接

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])

df3 = pd.DataFrame({
    'E': ['E0', 'E1', 'E2', 'E3'],
    'F': ['F0', 'F1', 'F2', 'F3'],
    'G': ['G0', 'G1', 'G2', 'G3'],
    'H': ['H0', 'H1', 'H2', 'H3']
}, index=[0, 1, 2, 3])

result = pd.concat([df1, df3], sort=False)
print(result)

Output:

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

示例代码 7:列名不同时的内连接

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])

df3 = pd.DataFrame({
    'E': ['E0', 'E1', 'E2', 'E3'],
    'F': ['F0', 'F1', 'F2', 'F3'],
    'G': ['G0', 'G1', 'G2', 'G3'],
    'H': ['H0', 'H1', 'H2', 'H3']
}, index=[0, 1, 2, 3])

result = pd.concat([df1, df3], join='inner')
print(result)

Output:

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

3. 更复杂的例子

在实际应用中,我们可能需要处理更复杂的情况,比如同时处理多个 DataFrame,或者在连接时创建多级索引等。

示例代码 8:多个 DataFrame 的连接

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])

df3 = pd.DataFrame({
    'E': ['E0', 'E1', 'E2', 'E3'],
    'F': ['F0', 'F1', 'F2', 'F3'],
    'G': ['G0', 'G1', 'G2', 'G3'],
    'H': ['H0', 'H1', 'H2', 'H3']
}, index=[0, 1, 2, 3])

df4 = pd.DataFrame({
    'I': ['I0', 'I1', 'I2', 'I3'],
    'J': ['J0', 'J1', 'J2', 'J3'],
    'K': ['K0', 'K1', 'K2', 'K3'],
    'L': ['L0', 'L1', 'L2', 'L3']
}, index=[8, 9, 10, 11])

result = pd.concat([df1, df2, df3, df4])
print(result)

Output:

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

示例代码 9:创建多级索引

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])

df3 = pd.DataFrame({
    'E': ['E0', 'E1', 'E2', 'E3'],
    'F': ['F0', 'F1', 'F2', 'F3'],
    'G': ['G0', 'G1', 'G2', 'G3'],
    'H': ['H0', 'H1', 'H2', 'H3']
}, index=[0, 1, 2, 3])

df4 = pd.DataFrame({
    'I': ['I0', 'I1', 'I2', 'I3'],
    'J': ['J0', 'J1', 'J2', 'J3'],
    'K': ['K0', 'K1', 'K2', 'K3'],
    'L': ['L0', 'L1', 'L2', 'L3']
}, index=[8, 9, 10, 11])

result = pd.concat([df1, df2, df3], keys=['first', 'second', 'third'])
print(result)

Output:

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

示例代码 10:验证数据完整性

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])

df3 = pd.DataFrame({
    'E': ['E0', 'E1', 'E2', 'E3'],
    'F': ['F0', 'F1', 'F2', 'F3'],
    'G': ['G0', 'G1', 'G2', 'G3'],
    'H': ['H0', 'H1', 'H2', 'H3']
}, index=[0, 1, 2, 3])

df4 = pd.DataFrame({
    'I': ['I0', 'I1', 'I2', 'I3'],
    'J': ['J0', 'J1', 'J2', 'J3'],
    'K': ['K0', 'K1', 'K2', 'K3'],
    'L': ['L0', 'L1', 'L2', 'L3']
}, index=[8, 9, 10, 11])

result = pd.concat([df1, df1], verify_integrity=True)
print(result)

4. 总结

Pandas 的 concat() 函数是一个非常强大的工具,可以帮助我们在数据处理和分析中有效地合并数据。通过上述示例,我们可以看到 concat() 函数在不同情况下的应用,包括处理索引、处理不同的列名、以及创建多级索引等。掌握这些技能将大大提高我们在数据处理中的效率和灵活性。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程