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

pandas pivot_table非空写入Excel后工作表内容缺失问题

问题原因

pivot_table 方法中传入index参数指定的字段,会成为生成结果的行索引,不属于DataFrame的普通存储列:

  • 直接执行print(result)时,pandas默认会把行索引和普通列一起打印展示,所以你能看到Client Code、Client Name和计算后的财年内容,会误以为所有字段都属于普通列。
  • 调用to_excel时传入了index=False参数,该参数的作用是导出Excel时丢弃所有行索引内容,最终就只会保留作为values传入的Fiscal year的聚合计算结果,两个索引字段的内容全部缺失。
解决方案

二选一即可:

  • 方案1:保留索引导出,去掉index=False参数(to_excel默认index=True,会自动把多级索引按字段名导出为对应列),修正后代码如下:
result = df.pivot_table(
    index=['Client Code','Client Name'],
    values='Fiscal year',
    aggfunc = lambda x: '/'.join(list(set(str(v) for v in x)))
)

writer = pd.ExcelWriter('resultnew.xlsx', mode='w', engine='openpyxl')
result.to_excel(writer, sheet_name='Data')
writer.close()

注意:pandas新版本中已经不推荐手动调用writer.save(),统一用writer.close()即可,也可以用with上下文写法自动处理关闭逻辑,避免文件句柄残留。

  • 方案2:导出前先把索引重置为普通列,再保留原有index=False的写法也可以正常导出全部内容:
result = df.pivot_table(
    index=['Client Code','Client Name'],
    values='Fiscal year',
    aggfunc = lambda x: '/'.join(list(set(str(v) for v in x)))
)
# 重置索引,将行索引转换为普通数据列
result = result.reset_index()

writer = pd.ExcelWriter('resultnew.xlsx', mode='w', engine='openpyxl')
result.to_excel(writer, sheet_name='Data', index=False)
writer.close()

内容的提问来源于stack exchange,提问作者Vito G.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 02:27:15