首页 > 编程笔记 > Python笔记 阅读:1

Pandas stack()和unstack()的用法(附带实例)

在使用 Pandas 处理数据的过程中,有时需要对数据进行行列转换或重排,可以借助 stack() 和 unstack() 方法实现。

Pandas stack()方法

stack() 方法用于将原来的列索引转换成最内层的行索引,转换效果如下图所示:


图 1 stack() 方法转换效果

stack() 方法的语法格式如下:
DataFrame.stack(level=-1, dropna=True)
参数说明:
【实例 1】对英语成绩表进行行列转换,程序代码如下:
# 导入pandas模块
import pandas as pd

# 解决数据输出时列名不对齐的问题
pd.set_option('display.unicode.east_asian_width', True)

df = pd.read_excel('../datas/grade.xlsx')  # 读取Excel文件
df = df.set_index(['班级', '序号'])  # 设置2级索引“班级”和“序号”
df = df.stack()  # 行列转换
print(df)

Pandas unstack()方法

unstack() 方法与 stack() 方法相反,它是 stack() 方法的逆操作,即将最内层的行索引转换成列索引:

转换效果如下图所示:


图 2 unstack() 方法转换效果

unstack() 方法的语法格式如下:
DataFrame.unstack(level=-1, fill_value=None)
参数说明:
【实例 2】使用 unstack() 方法转换学生成绩表。同上例,转换学生成绩表,主要代码如下:
df = pd.read_excel(io='../datas/grade.xlsx', sheet_name='英语2')  # 读取Excel文件
df = df.set_index(['班级', '序号', 'Unnamed: 2'])  # 设置多级索引
print(df.unstack())  # 数据转换
unstack() 方法中有一个参数可以指定转换第几层索引,例如,unstack(0) 表示把第一层行索引转换为列索引,默认是将最内层行索引转换为列索引。

相关文章