Pandas 垂直堆叠
在数据处理中,我们经常需要将多个数据集合并在一起。Pandas提供了多种数据合并的方法,其中垂直堆叠是一种按行合并DataFrame的常用操作。本文将详细介绍如何使用Pandas进行垂直堆叠,并通过实际案例帮助你理解其应用场景。
什么是垂直堆叠?
垂直堆叠(Vertical Stacking)是指将多个DataFrame按行方向堆叠在一起,形成一个新的DataFrame。这种操作通常用于将具有相同列结构的数据集合并在一起。例如,假设你有两个包含相同列的数据集,分别记录了不同时间段的数据,你可以通过垂直堆叠将它们合并成一个更大的数据集。
在Pandas中,垂直堆叠主要通过pd.concat()
函数实现,通过设置axis=0
来指定按行堆叠。
基本语法
import pandas as pd
# 创建两个示例DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5']
})
# 垂直堆叠
result = pd.concat([df1, df2], axis=0)
print(result)
输出:
A B
0 A0 B0
1 A1 B1
2 A2 B2
0 A3 B3
1 A4 B4
2 A5 B5
pd.concat()
函数的axis
参数决定了堆叠的方向。axis=0
表示按行堆叠(垂直堆叠),axis=1
表示按列堆叠(水平堆叠)。
处理索引问题
在垂直堆叠时,默认情况下,Pandas会保留原始DataFrame的索引。这可能导致新DataFrame中出现重复的索引值。如果你希望重置索引,可以使用ignore_index=True
参数。
result = pd.concat([df1, df2], axis=0, ignore_index=True)
print(result)
输出:
A B
0 A0 B0
1 A1 B1
2 A2 B2
3 A3 B3
4 A4 B4
5 A5 B5
如果你希望保留原始索引,但希望区分不同来源的数据,可以使用keys
参数为每个DataFrame添加一个多级索引。
result = pd.concat([df1, df2], axis=0, keys=['df1', 'df2'])
print(result)
输出:
A B
df1 0 A0 B0
1 A1 B1
2 A2 B2
df2 0 A3 B3
1 A4 B4
2 A5 B5
实际应用场景
场景1:合并多个时间段的数据
假设你有一家公司每个月的销售数据,分别存储在不同的DataFrame中。你可以使用垂直堆叠将这些数据合并成一个完整的年度销售数据。
# 假设有三个月的销售数据
jan_sales = pd.DataFrame({
'Date': ['2023-01-01', '2023-01-02'],
'Sales': [100, 150]
})
feb_sales = pd.DataFrame({
'Date': ['2023-02-01', '2023-02-02'],
'Sales': [200, 250]
})
mar_sales = pd.DataFrame({
'Date': ['2023-03-01', '2023-03-02'],
'Sales': [300, 350]
})
# 合并三个月的销售数据
annual_sales = pd.concat([jan_sales, feb_sales, mar_sales], axis=0, ignore_index=True)
print(annual_sales)
输出:
Date Sales
0 2023-01-01 100
1 2023-01-02 150
2 2023-02-01 200
3 2023-02-02 250
4 2023-03-01 300
5 2023-03-02 350
场景2:合并多个来源的数据
假设你有来自不同部门的数据,每个部门的数据结构相同,但存储在不同的DataFrame中。你可以使用垂直堆叠将这些数据合并成一个完整的数据集。
# 假设有两个部门的数据
hr_data = pd.DataFrame({
'Employee': ['Alice', 'Bob'],
'Department': ['HR', 'HR']
})
it_data = pd.DataFrame({
'Employee': ['Charlie', 'David'],
'Department': ['IT', 'IT']
})
# 合并两个部门的数据
company_data = pd.concat([hr_data, it_data], axis=0, ignore_index=True)
print(company_data)
输出:
Employee Department
0 Alice HR
1 Bob HR
2 Charlie IT
3 David IT
总结
垂直堆叠是Pandas中一种非常实用的数据合并操作,特别适用于将具有相同列结构的数据集按行合并。通过pd.concat()
函数,你可以轻松实现这一操作,并根据需要处理索引问题。
在实际应用中,垂直堆叠常用于合并多个时间段的数据或多个来源的数据。掌握这一技巧将大大提高你在数据处理中的效率。
附加资源与练习
- 练习1:创建一个包含两个DataFrame的示例,分别记录不同产品的销售数据,并使用垂直堆叠将它们合并。
- 练习2:尝试使用
keys
参数为合并后的DataFrame添加多级索引,并观察结果。
在进行垂直堆叠时,确保所有DataFrame的列结构相同,否则可能会导致数据丢失或错误。
希望本文对你理解Pandas垂直堆叠有所帮助!继续练习,你将更加熟练地掌握这一技能。