hbs*_*123 2 python excel export-to-excel dataframe pandas
我有一个 pandas 数据框df
,如下所示:
Germany
Population GDP GDP GDP CO2
2015 2020 2015 2020 2010 2020 2030
0 26572 28985 25367 32194 44835 14415 45785
1 12372 41730 35112 37214 40748 16088 46963
2 26480 46811 37487 30372 48703 37997 43135
Run Code Online (Sandbox Code Playgroud)
这些列是由 3 个级别组成的多索引。第一级以德国为国家。第二级有一些指标,第三级有年份。pandas 数据框中有一些数据。
我想将此数据框导出到 Excel,以便在每一列中获得德国。然后我想将人口、GDP 和二氧化碳合并为第二级。它应该看起来如图所示:
当我使用时df.to_excel(file, merge_cells = True)
,我得到如图所示的东西:但我不想合并德国的列,并希望将其拆分,如顶部的屏幕截图所示。它也不能用作
merge_cells = False
参数,因为不同级别中的列名称将连接为一行中的列名称。
相应地导出它的合适方法是什么?(如果可能的话,导出文件中年份和值之间的空行是否也可以删除?)
注意:
df.to_dict()
看起来像这样:
{('Germany', 'Population', 2015): {0: 26572, 1: 12372, 2: 26480},
('Germany', 'Population', 2020): {0: 28985, 1: 41730, 2: 46811},
('Germany', 'GDP', 2015): {0: 25367, 1: 35112, 2: 37487},
('Germany', 'GDP', 2020): {0: 32194, 1: 37214, 2: 30372},
('Germany', 'GDP', 2010): {0: 44835, 1: 40748, 2: 48703},
('Germany', 'CO2', 2020): {0: 14415, 1: 16088, 2: 37997},
('Germany', 'CO2', 2030): {0: 45785, 1: 46963, 2: 43135}}
Run Code Online (Sandbox Code Playgroud)
一个技巧是单独写入第一级MultiIndex
,然后跳过第一行写入另一个值 - 没有第一级的 DataFrame:
writer = pd.ExcelWriter('data.xlsx')
df1 = pd.DataFrame(columns=df.droplevel([1,2], axis=1).columns)
df2 = df.droplevel(0, axis=1)
df1.to_excel(writer, sheet_name='Sheet1')
df2.to_excel(writer, sheet_name='Sheet1', merge_cells = True, startrow=1)
writer.close()
Run Code Online (Sandbox Code Playgroud)