使用Pandas DataFrame修改CSV后文件大小异常变化问题咨询
嘿,这个问题我之前踩过好几次坑!虽然编码一致、行列数和元素大小都没改,但Pandas在读写CSV时的默认行为很容易导致文件大小波动,给你列几个最可能的原因和解决办法:
索引被额外写入了:
这是最常见的元凶!Pandas读取CSV时会自动生成整数索引,但原始CSV里并没有这一列。如果保存时没指定index=False,Pandas会把这列索引写入新CSV,相当于多了一列数据,文件自然变大。
解决办法:保存时加上参数:df.to_csv('new_file.csv', index=False)浮点数的精度输出不同:
原始CSV里的浮点数可能是简洁表示(比如0.5),但Pandas内部用更高精度的浮点数存储,保存时会输出完整的精度字符串(比如0.5000000000000000),每个浮点数的字节数变多,累积起来差异就明显了。
解决办法:用float_format指定精度,比如保留6位小数:df.to_csv('new_file.csv', float_format='%.6f')空值的表示方式改变:
原始CSV里的空值可能是空字符串"",但Pandas默认会把空值保存为NaN,NaN比空字符串多3个字符,大量空值的话文件大小会显著增加。
解决办法:指定和原始一致的空值表示:df.to_csv('new_file.csv', na_rep='')字符串的引号策略差异:
原始CSV可能只有包含特殊字符(比如逗号、换行)的字符串才加引号,但Pandas的默认引号策略(csv.QUOTE_MINIMAL)可能和原始文件不一致,比如给更多字符串加了引号,额外的引号会增加文件大小。
解决办法:调整quoting参数匹配原始文件,比如如果原始文件没有引号,可以设置:import csv df.to_csv('new_file.csv', quoting=csv.QUOTE_NONE, escapechar='\\')注意:如果字符串里包含分隔符,一定要加
escapechar避免格式错误。换行符或编码的细微差异:
虽然你指定了相同编码,但有些细节可能被忽略:比如原始文件是Windows换行符\r\n,而Pandas保存时用Unix换行符\n(不过这个通常会让文件变小);或者原始文件带UTF-8 BOM,而保存时没加(反之亦然)。可以尝试指定换行符:df.to_csv('new_file.csv', lineterminator='\r\n')
建议你先检查索引的问题,这大概率是导致大小差异的原因!如果还没解决,再依次排查浮点数精度和空值的表示。
内容的提问来源于stack exchange,提问作者mani

