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

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

参考:pandas concat 2 dataframes

在数据分析和数据处理中,经常需要将多个数据集合并为一个更大的数据集。Pandas 是 Python 中一个强大的数据处理库,它提供了多种方式来合并数据,其中 concat() 函数是一个非常常用的功能。本文将详细介绍如何使用 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: 一个序列或映射,这里面的每个对象都是要合并的 pandas 数据结构(Series 或 DataFrame)。
  • axis: {0/'index', 1/'columns'}, 默认为 0,即沿着索引(行)合并。
  • join: {'inner', 'outer'}, 默认为 ‘outer’。outer 返回所有的列,inner 返回两个 DataFrame 都有的列。
  • ignore_index: 布尔值,默认为 False。如果为 True,则不使用索引值,而是创建一个新的索引。
  • keys: 用于形成层次化索引的值。
  • verify_integrity: 布尔值,默认为 False。如果为 True,则检查新的轴是否包含重复项。
  • sort: 布尔值,默认为 False。在沿轴连接时排序。

2. 示例代码

示例 1: 基本的 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])

# 使用 concat 合并 DataFrame
result = pd.concat([df1, df2])
print(result)

Output:

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

示例 2: 沿列合并 DataFrame

import pandas as pd

# 创建两个 DataFrame
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']
})

# 沿列合并 DataFrame
result = pd.concat([df1, df2], axis=1)
print(result)

Output:

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

示例 3: 使用内连接合并 DataFrame

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=[2, 3, 4, 5])

# 使用内连接合并 DataFrame
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']
})

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

示例 5: 使用键创建层次化索引

import pandas as pd

# 创建两个 DataFrame
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=['df1', 'df2'])
print(result)

Output:

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

示例 6: 检查合并后的 DataFrame 是否有重复的索引

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=[3, 4, 5, 6])

# 检查合并后的 DataFrame 是否有重复的索引
result = pd.concat([df1, df2], verify_integrity=True)
print(result)

示例 7: 在合并时排序列

import pandas as pd

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

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

# 在合并时排序列
result = pd.concat([df1, df2], sort=True)
print(result)

Output:

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

示例 8: 使用多个 DataFrame 进行合并

import pandas as pd

# 创建多个 DataFrame
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']
})

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

# 使用 concat 合并多个 DataFrame
result = pd.concat([df1, df2, df3])
print(result)

Output:

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

示例 9: 合并具有不同列的 DataFrame

import pandas as pd

# 创建两个具有不同列的 DataFrame
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']
})

# 合并具有不同列的 DataFrame
result = pd.concat([df1, df2], sort=False)
print(result)

Output:

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

示例 10: 使用外连接合并 DataFrame

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=[2, 3, 4, 5])

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

Output:

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

示例 11: 指定层次化索引的名称

import pandas as pd

# 创建两个 DataFrame
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=['Group1', 'Group2'], names=['Group', 'Index'])
print(result)

Output:

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

示例 12: 合并时保留原有 DataFrame 的索引

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

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

Output:

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

示例 13: 检查合并后的 DataFrame 的完整性

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=[2, 3, 4, 5])

# 检查合并后的 DataFrame 的完整性
try:
    result = pd.concat([df1, df2], verify_integrity=True)
    print(result)
except ValueError as e:
    print("Error:", e)

Output:

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

示例 14: 合并具有相同列但不同顺序的 DataFrame

import pandas as pd

# 创建两个具有相同列但不同顺序的 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

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

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

Output:

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

示例 15: 使用多级键合并多个 DataFrame

import pandas as pd

# 创建多个 DataFrame
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']
})

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

# 使用多级键合并多个 DataFrame
result = pd.concat([df1, df2, df3], keys=['Level1', 'Level2', 'Level3'])
print(result)

Output:

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

这些示例展示了如何使用 Pandas 的 concat() 函数来合并两个或多个 DataFrame。通过调整参数,可以灵活地处理不同的数据合并需求,例如保留索引、忽略索引、内连接或外连接等。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程