You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas Crosstable导出Excel时列描述缺失、数据错位如何解决?

问题描述

我编写了一段用于生成面板与所用电机交叉表的代码:

import pandas as pd

Pnl = ['Panel A','Panel A','Panel A','Panel A','Panel A','Panel B','Panel B','Panel B','Panel B','Panel C','Panel C','Panel C']
Pwr = [0.55,1,0.55,4,2.2,2.2,1,0.55,4,5,1,2.2]

df = pd.DataFrame({"Panel": Pnl, "Power" : Pwr})
df_cross = pd.crosstab(df['Panel'],df['Power'])
print(df_cross)
df_cross.to_excel('crosstable.xlsx')

控制台输出的交叉表显示正常,但导出至Excel后,Power值出现错位,且列描述消失。此前我导出透视表时未出现此类问题,请问我哪里操作有误?

问题原因与解决方法

原因

pd.crosstab生成的交叉表中,Power是作为列索引存在的,并非普通列名。直接导出时,Excel会自动合并列索引的层级单元格,导致视觉错位;而"Power"作为索引名称,默认不会被当作表头行导出,所以看起来列描述消失了。

解决方法

给你两种简单的修复方案:

方案1:把列索引转成普通列,手动添加表头

这种方式会让表格结构和Excel常规格式完全一致:

import pandas as pd

Pnl = ['Panel A','Panel A','Panel A','Panel A','Panel A','Panel B','Panel B','Panel B','Panel B','Panel C','Panel C','Panel C']
Pwr = [0.55,1,0.55,4,2.2,2.2,1,0.55,4,5,1,2.2]

df = pd.DataFrame({"Panel": Pnl, "Power" : Pwr})
df_cross = pd.crosstab(df['Panel'],df['Power'])

# 重置索引,把Panel转成普通列,Power值转为列名
df_cross = df_cross.reset_index()
# 构建表头行:第一列是Panel,后面所有列都是Power
header = pd.DataFrame([['Panel'] + ['Power']*len(df_cross.columns[1:])], columns=df_cross.columns)
# 合并表头和数据
final_df = pd.concat([header, df_cross], ignore_index=True)

# 导出时不要带索引
final_df.to_excel('crosstable.xlsx', index=False)

方案2:禁用Excel单元格合并,保留索引结构

如果想保留交叉表的索引结构,只需要在导出时关闭合并单元格:

import pandas as pd

Pnl = ['Panel A','Panel A','Panel A','Panel A','Panel A','Panel B','Panel B','Panel B','Panel B','Panel C','Panel C','Panel C']
Pwr = [0.55,1,0.55,4,2.2,2.2,1,0.55,4,5,1,2.2]

df = pd.DataFrame({"Panel": Pnl, "Power" : Pwr})
df_cross = pd.crosstab(df['Panel'],df['Power'])

# 用ExcelWriter导出,禁用合并单元格
with pd.ExcelWriter('crosstable.xlsx') as writer:
    df_cross.to_excel(writer, merge_cells=False)

这样导出后,"Power"会显示在Excel表头的左上角,各个Power值作为列名正常排列,不会出现错位。

内容的提问来源于stack exchange,提问作者Pyter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:22:23