为何102GB的CSV文件经.to_csv分割后各分片体积大幅缩小?是否正常?
CSV分片后体积大幅缩小是否正常?原因分析
这种体积大幅缩小的现象是正常的,背后主要有这些原因:
- 编码格式优化:原102GB的CSV可能采用了更占空间的编码(比如UTF-16、带BOM的UTF-8),而你保存时指定了
encoding="utf-8",UTF-8对英文、数字等字符仅用1字节存储,相比UTF-16的2字节/字符能大幅节省空间;同时如果原文件带UTF-8 BOM,保存时Pandas默认不会写入BOM,也会减少部分体积。 - 冗余内容自动清理:
- 原CSV可能存在大量冗余的引号:比如不管字段内容是否需要,都强制给所有字段加引号,而Pandas的
to_csv默认仅对包含逗号、换行符等特殊字符的字段添加引号,减少了不必要的引号占用空间。 - 原文件可能有空列、重复空格或空值的冗余存储(比如把空值存成多个空格或特殊占位符),Pandas读取后会自动规整为空字符串或更紧凑的存储形式。
- 原CSV可能存在大量冗余的引号:比如不管字段内容是否需要,都强制给所有字段加引号,而Pandas的
- 数据类型的隐性转换:如果原CSV中的数值、日期等数据是以字符串格式存储(比如带前导零、多余格式符号),Pandas读取时会自动转换为对应的数值/日期类型,保存时直接输出简洁的数值/日期字符串,比原字符串格式占用更少字节。
- 换行符与分隔符的差异:原文件可能使用Windows风格的CRLF(
\r\n)换行,而Pandas在多数系统下会默认保存为Unix风格的LF(\n),每行少1字节,百万级别的行累积下来体积差会非常明显;另外如果原文件用了带空格的分隔符(比如,),Pandas保存时默认用单个逗号作为分隔符,也会减少额外字节的占用。 - 索引列的移除:你的代码中指定了
index=False,如果原CSV本身包含额外的索引列(或者读取时Pandas自动生成了索引但原文件没有),保存时去掉这一列会直接减少对应的数据体积。
你的分片保存代码示例:
df.iloc[:100000, :].to_csv(f"part1.csv", index=False, encoding="utf-8")
内容的提问来源于stack exchange,提问作者just want to learn
相关产品推荐
相关产品推荐

