跳到主要内容

Pandas 垂直堆叠

在数据处理中,我们经常需要将多个数据集合并在一起。Pandas提供了多种数据合并的方法,其中垂直堆叠是一种按行合并DataFrame的常用操作。本文将详细介绍如何使用Pandas进行垂直堆叠,并通过实际案例帮助你理解其应用场景。

什么是垂直堆叠?

垂直堆叠(Vertical Stacking)是指将多个DataFrame按行方向堆叠在一起,形成一个新的DataFrame。这种操作通常用于将具有相同列结构的数据集合并在一起。例如,假设你有两个包含相同列的数据集,分别记录了不同时间段的数据,你可以通过垂直堆叠将它们合并成一个更大的数据集。

在Pandas中,垂直堆叠主要通过pd.concat()函数实现,通过设置axis=0来指定按行堆叠。

基本语法

python
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参数。

python
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添加一个多级索引。

python
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中。你可以使用垂直堆叠将这些数据合并成一个完整的年度销售数据。

python
# 假设有三个月的销售数据
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中。你可以使用垂直堆叠将这些数据合并成一个完整的数据集。

python
# 假设有两个部门的数据
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垂直堆叠有所帮助!继续练习,你将更加熟练地掌握这一技能。