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

Python提取大型CSV指定列至新文件的性能优化方案咨询

优化大型CSV文件列提取速度的实用方法

针对你用pandas处理大型CSV提取指定列速度慢的问题,以下是几个直接有效的优化方向:

1. 优化pandas读取参数,减少内存与计算开销

  • 只读取需要的列:永远不要读取全量数据再筛选列,直接用usecols参数指定目标列,从根源减少IO和内存占用。
  • 手动指定数据类型:pandas默认的类型推断会消耗额外时间,且可能用更占内存的类型(比如默认用int64/float64)。针对字符串列可以设为category(如果重复值多),数值列用更小的类型(比如int32/float32)。
  • 使用C引擎:pandas的read_csv默认用C引擎,比Python引擎快很多,确保engine='c'(默认无需修改,但如果之前改了要改回来)。

示例代码:

import pandas as pd

# 只读取目标列,手动指定类型
df = pd.read_csv(
    "large_file.csv",
    usecols=["target_col1", "target_col2"],
    dtype={
        "target_col1": "int32",
        "target_col2": "category"
    },
    engine="c"
)
df.to_csv("output.csv", index=False)

2. 分块处理,避免一次性加载全量数据

如果文件大到内存无法容纳,用chunksize参数分块读取,逐块写入输出文件,既节省内存又能稳步处理。

示例代码:

import pandas as pd

chunk_size = 100000  # 可根据内存调整块大小
output_path = "output.csv"
first_write = True

for chunk in pd.read_csv(
    "large_file.csv",
    usecols=["target_col1", "target_col2"],
    chunksize=chunk_size
):
    # 第一次写入保留表头,后续追加时跳过
    chunk.to_csv(
        output_path,
        mode="a",
        header=first_write,
        index=False
    )
    first_write = False

3. 改用更轻量/高效的工具

如果pandas的 overhead还是太大,可以换用以下工具:

  • 标准库csv模块:纯Python实现,没有pandas的额外封装,适合简单的列提取场景,速度和内存效率都不错。
    示例代码:
    import csv
    
    target_cols = ["target_col1", "target_col2"]
    
    with open("large_file.csv", "r", newline="") as infile, open("output.csv", "w", newline="") as outfile:
        reader = csv.DictReader(infile)
        writer = csv.DictWriter(outfile, fieldnames=target_cols)
        writer.writeheader()
        for row in reader:
            writer.writerow({col: row[col] for col in target_cols})
    
  • Polars库:专为大数据处理设计的库,速度和内存效率远超pandas,语法和pandas接近,学习成本低。
    示例代码:
    import polars as pl
    
    # 直接读取目标列并写入
    pl.read_csv("large_file.csv", columns=target_cols).write_csv("output.csv")
    
  • 命令行工具:如果场景极简单(比如只提取固定列),用awk/cut等命令行工具处理速度最快,完全不需要Python:
    # 假设列名对应第1、2列,用awk提取
    awk -F ',' 'NR==1{print $1","$2} NR>1{print $1","$2}' large_file.csv > output.csv
    

4. 其他细节优化

  • 确保CSV文件存储在本地磁盘,避免网络文件系统(比如NFS)的IO延迟;
  • 如果是压缩CSV,优先用支持流式解压的格式(比如gzip),pandas和Polars都支持直接读取.gz文件;
  • 关闭pandas的low_memory(设为False),避免分块类型推断导致的额外开销(前提是已经手动指定了dtypes)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:05:23