跳到主要内容

Pandas 形状变换

在数据分析和处理中,数据的形状(即数据的行和列的结构)经常需要根据需求进行调整。Pandas 提供了多种方法来帮助我们轻松地改变数据的形状,从而更好地适应分析需求。本文将详细介绍 Pandas 中的形状变换操作,包括转置、堆叠、解堆叠等。

什么是形状变换?

形状变换是指在不改变数据内容的前提下,调整数据的行和列的结构。例如,将数据从宽格式转换为长格式,或者将行和列进行交换。这些操作在数据预处理和可视化中非常常见。

转置(Transpose)

转置是最简单的形状变换操作之一,它将数据的行和列进行交换。在 Pandas 中,可以使用 .T 属性来实现转置。

示例

python
import pandas as pd

# 创建一个简单的 DataFrame
data = {
'A': [1, 2, 3],
'B': [4, 5, 6],
'C': [7, 8, 9]
}
df = pd.DataFrame(data)

# 转置 DataFrame
df_transposed = df.T

print("原始 DataFrame:")
print(df)
print("\n转置后的 DataFrame:")
print(df_transposed)

输出:

原始 DataFrame:
A B C
0 1 4 7
1 2 5 8
2 3 6 9

转置后的 DataFrame:
0 1 2
A 1 2 3
B 4 5 6
C 7 8 9
提示

转置操作在处理时间序列数据或需要将行和列进行交换的场景中非常有用。

堆叠(Stack)与解堆叠(Unstack)

堆叠和解堆叠是 Pandas 中用于处理多级索引(MultiIndex)数据的强大工具。堆叠将列转换为行,而解堆叠则将行转换为列。

堆叠(Stack)

堆叠操作将 DataFrame 的列“压缩”为行,生成一个具有多级索引的 Series。

python
# 创建一个具有多级列索引的 DataFrame
arrays = [
['A', 'A', 'B', 'B'],
['one', 'two', 'one', 'two']
]
index = pd.MultiIndex.from_arrays(arrays, names=('Upper', 'Lower'))
df = pd.DataFrame({'X': [1, 2, 3, 4], 'Y': [5, 6, 7, 8]}, index=index)

# 堆叠 DataFrame
stacked = df.stack()

print("原始 DataFrame:")
print(df)
print("\n堆叠后的 Series:")
print(stacked)

输出:

原始 DataFrame:
Upper Lower X Y
A one 1 5
two 2 6
B one 3 7
two 4 8

堆叠后的 Series:
Upper Lower
A one X 1
Y 5
two X 2
Y 6
B one X 3
Y 7
two X 4
Y 8
dtype: int64

解堆叠(Unstack)

解堆叠操作将堆叠后的 Series 或 DataFrame 重新展开为宽格式。

python
# 解堆叠 Series
unstacked = stacked.unstack()

print("解堆叠后的 DataFrame:")
print(unstacked)

输出:

解堆叠后的 DataFrame:
Lower one two
Upper
A X 1 2
Y 5 6
B X 3 4
Y 7 8
备注

堆叠和解堆叠操作在处理多级索引数据时非常有用,尤其是在需要将数据从宽格式转换为长格式时。

实际应用案例

假设我们有一份销售数据,记录了不同产品在不同地区的销售额。我们希望将数据从宽格式转换为长格式,以便进行进一步的分析。

python
# 创建销售数据
data = {
'Product': ['A', 'B', 'C'],
'Region1': [100, 150, 200],
'Region2': [110, 160, 210],
'Region3': [120, 170, 220]
}
df = pd.DataFrame(data)

# 将宽格式转换为长格式
df_melted = df.melt(id_vars=['Product'], var_name='Region', value_name='Sales')

print("原始 DataFrame:")
print(df)
print("\n转换后的长格式 DataFrame:")
print(df_melted)

输出:

原始 DataFrame:
Product Region1 Region2 Region3
0 A 100 110 120
1 B 150 160 170
2 C 200 210 220

转换后的长格式 DataFrame:
Product Region Sales
0 A Region1 100
1 B Region1 150
2 C Region1 200
3 A Region2 110
4 B Region2 160
5 C Region2 210
6 A Region3 120
7 B Region3 170
8 C Region3 220
警告

在进行形状变换时,务必确保数据的完整性和一致性,避免数据丢失或错误。

总结

Pandas 提供了多种形状变换的工具,包括转置、堆叠、解堆叠等。这些操作在数据预处理和分析中非常有用,能够帮助我们更好地理解和处理数据。通过本文的学习,你应该能够掌握这些基本的形状变换操作,并能够在实际项目中灵活运用。

附加资源与练习

  • 练习 1:创建一个包含多级索引的 DataFrame,并尝试使用堆叠和解堆叠操作。
  • 练习 2:使用 .melt() 方法将一个宽格式的 DataFrame 转换为长格式,并分析转换后的数据。
提示

更多关于 Pandas 形状变换的详细信息,可以参考 Pandas 官方文档