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

为什么pandas read_csv指定usecols读取少量列速度依然很慢?

问题原因

你猜测的pandas需要先完整读取300万列表头才能筛选列是核心原因之一,除此之外还有更主要的开销:

  • 默认C解析引擎需要逐行扫描全部列的分隔符才能确定列边界,哪怕只保留14列,也要完成300行×300万列的分隔符匹配,总扫描次数接近9亿次,这部分是耗时的主要来源
  • dtype参数仅能优化列数据的类型转换开销,和表头解析、全列扫描的开销相比可以忽略,所以是否指定dtype对总耗时几乎没有影响

优化方案

  • 更换解析引擎:pandas 1.4及以上版本可以在read_csv时添加engine='pyarrow'参数,pyarrow的CSV解析器对超宽表的处理效率远高于默认C引擎,仅这一个改动通常就能把耗时降到10秒以内
  • 预定位目标列位置:先单独读取第一行表头,拿到你需要的14列对应的数字索引,把索引列表传给usecols参数而非列名字符串,可省去后续解析过程中的列名匹配开销
  • 手动轻量解析:极端场景下可以直接用Python标准库csv模块逐行读取,每行仅提取目标索引的14个值后再组装为DataFrame,跳过pandas全列扫描的默认逻辑
  • 预处理一劳永逸:如果需要反复读取该文件的指定列,建议第一次读取后把这14列单独存储为Parquet格式,后续读取Parquet文件的耗时通常在10毫秒级别
  • 系统工具前置处理:Linux/macOS环境下可以先用cut等shell命令提前切割出目标列生成小文件,再用pandas读取,shell原生文本处理的切割效率远高于Python层逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:06:06