如何用Pandas处理Excel多级表头实现列转行得到预期输出
错误原因
- 读取Excel文件时未指定多级表头参数,无法正确识别表格前两行的两级列名结构,导致列名和数据对应关系混乱
- 未将第一列的学生名正确识别为索引/普通列,原代码中
reset_index的使用方式不符合当前数据结构要求
修正后完整代码
import pandas as pd # 读取时指定前两行为多级表头,第一列为索引列 df = pd.read_excel('test.xlsx', header=[0, 1], index_col=0) # 将学生名索引转为普通列,列名设为Student df = df.reset_index(names='Student') # 逆透视转换,直接指定value列名避免后续重命名 dfs = pd.melt( df, id_vars=['Student'], value_vars=['$', '%', '#'], col_level=1, var_name='Symbol', value_name='Marks' ) # 按学生名排序,匹配需求的输出顺序 dfs = dfs.sort_values('Student', ignore_index=True) print(dfs)
代码说明
header=[0,1]:指定Excel的第1、2行作为两级列名,第一级是主列名Marks,第二级是子列名$/%/#index_col=0:将第一列的学生名识别为索引,避免被识别为普通数值列- 最后的排序步骤是因为
pd.melt默认会按Symbol分组输出(所有$的行在前、再是%、再是#),排序后可以按学生分组输出,和要求的格式完全一致
内容的提问来源于stack exchange,提问作者Teena Agrawal
相关产品推荐
相关产品推荐

