如何用Pandas减小CSV文件大小?删行后导出文件变大的原因及解决办法
Pandas导出CSV文件变大的原因及解决办法
为什么导出后的CSV更大?
- 数据类型膨胀:原CSV里的数值可能用了更精简的存储格式(比如小范围整数存成短格式、浮点数少几位小数),但Pandas默认会把数值转成精度更高的类型(比如int64、float64),每个字段占的字节数直接变多。
- 默认导出冗余内容:Pandas默认会给所有字符串加引号,哪怕字段里没有分隔符;另外如果原文件缺失值是空字符串,Pandas导出时会写成
NaN,这比空字符串占更多字符。 - 额外导出了索引列:
to_csv()默认会把DataFrame的索引写入文件,如果原CSV本来没有索引列,等于平白多了一整列数据,体积自然变大。
怎么减小文件大小?
- 关闭索引导出:
直接加index=False参数,避免写入多余的索引列:buses.to_csv('simplified_matrix2.csv', index=False) - 压缩数据类型:
根据数据实际范围,把数值类型转成更紧凑的格式,比如大整数转成int32/int16,浮点数转成float32:# 示例:调整整数列类型 buses['your_int_col'] = buses['your_int_col'].astype('int32') # 调整浮点数列类型 buses['your_float_col'] = buses['your_float_col'].astype('float32') buses.to_csv('simplified_matrix2.csv', index=False) - 限制浮点数精度:
用float_format指定浮点数保留的小数位数,减少每个字段的字符数:# 保留2位小数,按需调整位数 buses.to_csv('simplified_matrix2.csv', index=False, float_format='%.2f') - 减少不必要的引号:
只在字段包含分隔符时加引号,避免冗余的引号占用空间:from csv import QUOTE_MINIMAL buses.to_csv('simplified_matrix2.csv', index=False, quoting=QUOTE_MINIMAL) - 优化缺失值存储:
把Pandas默认的NaN替换成空字符串,减少字符占用:buses.fillna('', inplace=True) buses.to_csv('simplified_matrix2.csv', index=False)
内容的提问来源于stack exchange,提问作者Gaff
相关产品推荐
相关产品推荐

