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

如何加载大量数据用于机器学习模型训练?大CSV读取内核冻结如何解决

大型CSV数据集加载优化方案

2GB CSV读取卡死通常是默认参数下内存占用过高触发了系统交换内存(swap)读写,可通过以下方案解决:

1. 优化pd.read_csv()原生参数

  • 只加载需要的列:用usecols参数指定你实际需要用到的字段,200余列大概率不会全用到,跳过无关列能大幅减少内存占用、提升读取速度,示例代码:
    df = pd.read_csv("your_file.csv", usecols=["col1", "col2", "col3"])
  • 手动指定列数据类型:默认pandas会自动推断类型,很多时候会把数值型字段存为占用更高的int64/float64,或者把低基数的字符串存为object类型,可通过dtype参数手动指定,比如把分类字段设为'category'类型,数值型根据取值范围设为int32/float32,示例:
    df = pd.read_csv("your_file.csv", dtype={"category_col": "category", "num_col": "int32"})
  • 分块读取:用chunksize参数把文件拆成多个小数据块逐块处理,不需要一次性把全量数据加载到内存,适合需要全量数据但内存不足的场景,示例:
    chunk_size = 10000 # 每次加载1万条,可根据内存大小调整
    for chunk in pd.read_csv("your_file.csv", chunksize=chunk_size):
        # 对每个chunk单独做数据处理,比如过滤、聚合等
        process(chunk)
    
  • 关闭不必要的自动推断:如果数据里不需要解析日期,添加parse_dates=False关闭日期自动解析;如果有自定义的缺失值标识,用na_values指定避免异常推断消耗性能。

2. 换用更高性能的读取工具

  • 用polars库读取:polars是基于Rust开发的高性能数据分析库,内存效率和读取速度远高于pandas,支持惰性加载,不需要全量载入内存就能做数据处理,也兼容pandas接口,读取示例:
    import polars as pl
    # 读取后转pandas DataFrame
    df = pl.read_csv("your_file.csv").to_pandas()
    # 不需要转pandas的话直接用polars处理性能会更高
    
  • 用modin库替换pandas:modin可以自动并行化读取操作,接口和pandas完全一致,只需要替换导入语句即可,不需要修改其他业务代码,示例:
    import modin.pandas as pd
    df = pd.read_csv("your_file.csv")
    

3. 预处理为高效存储格式

如果后续需要频繁读取这个文件,可以先把文件转成列式存储的二进制格式,比如Parquet或者Feather,这两种格式压缩率高,读写速度是CSV的数倍到数十倍,第一次读取分块转存后,后续直接读二进制文件即可,转存示例:

# 分块读CSV转存为Parquet格式
for i, chunk in enumerate(pd.read_csv("your_file.csv", chunksize=10000)):
    chunk.to_parquet("output.parquet", append=True if i>0 else False)

# 后续直接读取Parquet文件,速度可提升数十倍
df = pd.read_parquet("output.parquet")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:06:02