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

如何高效将超大CSV指定多列快速追加到DataFrame中

超大型CSV处理性能优化方案

你的代码卡顿、运行慢的核心原因有两个:

  1. 读入CSV时默认加载全部列,222万行的全量数据会占用大量不必要的内存,直接拖慢整机运行速度
  2. 逐行写for循环、用loc取值再逐次append到列表的写法,是pandas中效率最低的操作方式,比原生向量化操作慢百倍以上,逐次append还会反复触发列表内存扩容,额外消耗性能。

具体优化步骤

  • 读入环节就裁剪无关数据,不要全量加载
    用read_csv的usecols参数指定只读取你需要的3列,从源头上减少内存占用。如果明确知道每列的数据类型,还可以通过dtype参数指定更小的数值类型,进一步压缩内存:
    import pandas as pd
    
    dataset = pd.read_csv(
        r'/Users/ha/GTruth/sumo-output-w/file_name.csv',
        # 仅读取需要的列,跳过所有无关字段
        usecols=["pos_x", "pos_y", "labels"],
        # 可选:根据你的实际数据类型指定,进一步降内存,比如坐标用32位浮点数、标签用小范围整数
        # dtype={"pos_x": "float32", "pos_y": "float32", "labels": "int16"}
    )
    
  • 彻底删除逐行循环逻辑,用pandas原生向量化操作直接批量生成目标列表
    不需要逐行遍历取值,pandas的批量列操作是C层实现的,222万行的数据处理仅需数秒即可完成:
    # 批量取pos_x、pos_y两列,直接转为每行一个坐标对的嵌套列表
    input_data = dataset[["pos_x", "pos_y"]].values.tolist()
    # 批量取labels列,直接转为标签列表
    output_data = dataset["labels"].tolist()
    

性能参考

优化后的代码整体运行时间通常在10秒以内(取决于磁盘读写速度),内存占用仅为原写法的1/5~1/10,不会出现整机卡顿的情况。
注意:除非迫不得已,永远不要在pandas中写逐行for循环配合loc/iloc取值,这类操作的性能损耗极大,绝大多数数据处理需求都可以通过pandas原生的批量向量化接口实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:09:20