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:
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:
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:
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:
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。通过调整不同的参数,我们可以处理索引重复、列不对齐和其他常见的数据合并问题。在实际应用中,根据数据的具体情况选择合适的参数,可以有效地合并数据,为后续的数据分析和处理提供便利。