You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas.to_csv保存4GB左右float16类型DataFrame耗时过长求助

解决pandas保存float16 DataFrame到CSV耗时过长的问题

问题根源

  1. float16转文本的计算开销:CSV是纯文本格式,pandas需要把每个float16数值转换成字符串,4GB内存的数据集包含海量数值,转换过程本身会消耗大量CPU资源。
  2. 默认引擎效率低:pandas默认使用纯Python实现的CSV写入引擎,处理大文件时性能远不如C语言引擎。
  3. 磁盘IO瓶颈:float16转成文本后体积会膨胀数倍(比如单个float16占2字节,转成字符串可能占5-10字节),最终CSV文件体积远大于4GB,大文件连续写入时磁盘IO会成为主要瓶颈。

具体优化方案

1. 切换到C语言引擎

直接指定engine='c',利用C实现的高速写入逻辑,这是最直接的提速手段:

df.to_csv('output.csv', engine='c')

2. 控制浮点数字符串长度

float16本身只有3-4位有效数字,指定float_format减少每个数值的字符串长度,既能缩小文件体积,又能降低转换开销:

df.to_csv('output.csv', engine='c', float_format='%.4f')

3. 分块写入数据集

把大DataFrame拆分成小块分批写入,避免一次性占用过多内存,同时缓解磁盘连续写入的压力:

chunk_size = 100000  # 可根据硬件情况调整大小
with open('output.csv', 'w') as f:
    # 先写入表头
    df.columns.to_csv(f, header=True, index=False)
    # 分块写入数据
    for start in range(0, len(df), chunk_size):
        end = start + chunk_size
        df.iloc[start:end].to_csv(f, header=False, index=False, engine='c')

4. 替换为二进制存储格式(推荐)

如果业务场景允许放弃CSV,Parquet或Feather这类二进制格式的读写速度是CSV的数倍,还能完美保留float16类型,文件体积也更小:

# 保存为Parquet(需安装pyarrow或fastparquet)
df.to_parquet('output.parquet')

# 保存为Feather(需安装pyarrow)
df.to_feather('output.feather')

5. 优化硬件环境

如果使用机械硬盘,换成SSD可大幅提升写入速度;临时关闭实时杀毒软件,避免文件写入时被后台扫描拖慢。


内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 17:26:04