pandas concat两个DataFrame垂直合并

pandas concat两个DataFrame垂直合并

参考:pandas concat two dataframes vertically

在数据处理和分析中,经常需要将多个数据集合并成一个更大的数据集。Pandas库提供了多种方式来合并数据,其中concat()函数是一个非常强大的工具,可以用来垂直或水平地合并多个DataFrame。本文将详细介绍如何使用Pandas的concat()函数来垂直合并两个DataFrame,并提供多个示例代码来展示不同的使用场景。

1. 基本用法

在Pandas中,concat()函数可以将数据沿一个轴合并。当我们设置axis=0时,函数将DataFrame垂直合并。这是最常见的合并方式,类似于SQL中的UNION ALL操作。

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

# 垂直合并df1和df2
result = pd.concat([df1, df2], axis=0)
print(result)

Output:

pandas concat两个DataFrame垂直合并

2. 处理索引

在垂直合并时,处理索引是一个重要的考虑因素。默认情况下,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], ignore_index=True)
print(result)

Output:

pandas concat两个DataFrame垂直合并

3. 处理列不对齐

当合并的DataFrame具有不同的列时,Pandas会自动对齐所有列,缺失的列将被填充为NaN。这可以通过设置join参数来控制。

示例代码3:处理列不对齐的情况

import pandas as pd

# 创建两个DataFrame,列不完全相同
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'],
    'D': ['D4', 'D5', 'D6', 'D7']
})

# 使用外连接合并,保留所有列
result = pd.concat([df1, df2], sort=False)
print(result)

Output:

pandas concat两个DataFrame垂直合并

4. 使用多层索引

在某些情况下,我们可能希望在合并时保留每个原始DataFrame的来源信息。这可以通过使用keys参数来实现,它会为合并后的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']
})

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

# 使用keys参数添加多层索引
result = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result)

Output:

pandas concat两个DataFrame垂直合并

5. 合并时添加额外信息

有时,在合并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']
})

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

# 在合并前添加额外的列
df1['Source'] = 'pandasdataframe.com'
df2['Source'] = 'pandasdataframe.com'

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

Output:

pandas concat两个DataFrame垂直合并

以上示例展示了如何使用Pandas的concat()函数来垂直合并两个DataFrame。通过调整不同的参数,我们可以处理索引重复、列不对齐和其他常见的数据合并问题。在实际应用中,根据数据的具体情况选择合适的参数,可以有效地合并数据,为后续的数据分析和处理提供便利。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程