使用pandas读写CSV时,df.shape返回的列数为何不一致?
问题原因及解决办法
核心原因:
你用pd.DataFrame创建的DataFrame默认带有序列索引(0、1、2...),调用df.to_csv()时,pandas默认会把这个索引写入CSV文件里。打开你导出的CSV就能看到,第一列是没有表头的数字序列,这就是原DataFrame的索引。
当你用pd.read_csv()读取时,pandas会把这列无表头的内容当成普通数据列,自动给它命名为Unnamed: 0之类的,所以列数从原来的2列变成了3列。解决办法:
- 导出时避免写入索引:
导出CSV时加上index=False参数,这样就不会把索引写入文件:
之后再用df.to_csv('your_file.csv', index=False)pd.read_csv读取,列数就和原DataFrame一致了。 - 读取时指定索引列:
如果已经导出了带索引的CSV,读取时可以把第一列指定为索引:
这样pandas会把第一列当作DataFrame的索引,不会额外增加数据列。df_new = pd.read_csv('your_file.csv', index_col=0)
- 导出时避免写入索引:
内容的提问来源于stack exchange,提问作者Ronnie
相关产品推荐
相关产品推荐

