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

Pandas调用to_csv导出CSV时索引列设置异常如何解决

问题原因

你的代码存在两个直接导致导出异常的问题:

  • set_index() 默认不会修改原DataFrame,只会返回设置完索引的新对象。你第一行代码跑完没有接收返回值,实际用来导出的merge_df根本没把Id、Part Id、Order Id设为索引,用的还是Pandas自动生成的从0开始的默认整数行索引,这就是你看到额外无意义索引列的原因。
  • to_csv() 里的index=False参数作用是导出时完全排除所有索引列,就算你真的把三个字段设成了索引,加这个参数也会把这三列全屏蔽,自然导不出来。
修复方法

按下面两点调整即可正常导出:

  1. 要么把set_index()返回的带索引的DataFrame赋值给新变量,要么给set_index()加inplace=True参数直接修改原数据
  2. 导出时删掉index=False参数,允许Pandas导出你提前设置好的多级索引

可直接运行的参考代码:

# 写法1:接收返回的新DataFrame再导出
indexed_df = merge_df.set_index(['Id','Part Id','Order Id'])
indexed_df.to_csv('/Downloads/Dataframe.csv')

# 写法2:原地修改原DataFrame后导出
merge_df.set_index(['Id','Part Id','Order Id'], inplace=True)
merge_df.to_csv('/Downloads/Dataframe.csv')
可选优化配置

如果导出后发现索引列的表头显示异常,可以加index_label参数手动指定三个索引列的表头名称,避免多级索引导出时表头错位:

merge_df.to_csv(
    '/Downloads/Dataframe.csv',
    index_label=['Id', 'Part Id', 'Order Id']
)

补充说明:如果你本来就只是想把这三列当普通列导出、不想要任何形式的行索引,那完全不需要调用set_index(),直接执行merge_df.to_csv('/Downloads/Dataframe.csv', index=False)就能得到你要的结果,这三列作为普通列会被正常写入CSV。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 15:21:19