CSV转二进制文件后体积大幅缩减是否符合预期?
这种文件大小缩减完全符合预期!
嘿,别担心,你的转换操作完全没问题,这种大幅的文件体积缩小是CSV转原生二进制格式的正常现象,咱们来具体拆解原因:
1. CSV与二进制存储的本质差异
CSV是纯文本格式,它的额外开销来自多个方面:
- 每个数值都要转换成字符串形式存储(比如
1.23456789这类字符串的长度,远大于二进制的固定字节数) - 每行的分隔符(逗号)、换行符都会占用额外空间
- 数值的符号、小数点、科学计数法标识(比如
1e-5)都会增加存储长度
而你用tofile()写入的是原生二进制数据,每个float64类型的数值固定占用8字节,没有任何冗余的文本符号或格式信息,这是最紧凑的数值存储方式。
2. 数值计算验证
咱们来算一笔精准的账:
你的数据集是700万行 × 29列 = 203,000,000个float64数值
总字节数 = 203,000,000 × 8字节 = 1,624,000,000字节 ≈ 1.51GB
这和你得到的data_binary.dat大小(1.5GB)几乎完全一致,完美匹配,说明转换过程没有丢失任何数据。
3. 快速验证转换正确性
如果你还是不放心,可以用下面的代码把二进制文件读回来,和原CSV的数据做对比:
import numpy as np import pandas as pd # 读取二进制文件并恢复原始形状 binary_data = np.fromfile('data_binary.dat', dtype=np.float64).reshape(7000000, 29) # 读取原CSV的前几行数据 df = pd.read_csv('data.csv', sep=',') original_data = df.values[:3] # 对比输出结果 print("原CSV前3行数据:") print(original_data) print("\n二进制文件读取的前3行数据:") print(binary_data[:3])
如果两次输出内容完全一致,就可以彻底确认转换是正确的。
内容的提问来源于stack exchange,提问作者Kristy




