Pandas调用to_csv导出CSV时索引列设置异常如何解决
问题原因
你的代码存在两个直接导致导出异常的问题:
set_index()默认不会修改原DataFrame,只会返回设置完索引的新对象。你第一行代码跑完没有接收返回值,实际用来导出的merge_df根本没把Id、Part Id、Order Id设为索引,用的还是Pandas自动生成的从0开始的默认整数行索引,这就是你看到额外无意义索引列的原因。to_csv()里的index=False参数作用是导出时完全排除所有索引列,就算你真的把三个字段设成了索引,加这个参数也会把这三列全屏蔽,自然导不出来。
修复方法
按下面两点调整即可正常导出:
- 要么把
set_index()返回的带索引的DataFrame赋值给新变量,要么给set_index()加inplace=True参数直接修改原数据 - 导出时删掉
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
相关产品推荐
相关产品推荐

