【发布时间】:2017-03-12 04:47:01
【问题描述】:
我想从一个看起来像这样的 Excel 文件中生成整洁的数据,其中包含三个级别的“合并”标题:
Pandas 可以很好地读取文件,带有多级标题:
# df = pandas.read_excel('test.xlsx', header=[0,1,2])
为了可重复性,您可以复制粘贴:
df = pandas.DataFrame({('Unnamed: 0_level_0', 'Unnamed: 0_level_1', 'a'): {1: 'aX', 2: 'aY'}, ('Unnamed: 1_level_0', 'Unnamed: 1_level_1', 'b'): {1: 'bX', 2: 'bY'}, ('Unnamed: 2_level_0', 'Unnamed: 2_level_1', 'c'): {1: 'cX', 2: 'cY'}, ('level1_1', 'level2_1', 'level3_1'): {1: 1, 2: 10}, ('level1_1', 'level2_1', 'level3_2'): {1: 2, 2: 20}, ('level1_1', 'level2_2', 'level3_1'): {1: 3, 2: 30}, ('level1_1', 'level2_2', 'level3_2'): {1: 4, 2: 40}, ('level1_2', 'level2_1', 'level3_1'): {1: 5, 2: 50}, ('level1_2', 'level2_1', 'level3_2'): {1: 6, 2: 60}, ('level1_2', 'level2_2', 'level3_1'): {1: 7, 2: 70}, ('level1_2', 'level2_2', 'level3_2'): {1: 8, 2: 80}})
我想对此进行规范化,以便级别标题位于可变行中,但将 a、b 和 c 列保留为列:
如果没有多级标题,我会使用pandas.melt(df, id_vars=['a', 'b', 'c']) 来获得我想要的。 pandas.melt(df) 给了我想要的三个变量列,但显然不保留 a、b 和 c 列。
【问题讨论】: