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

如何用Pandas高效筛选处理大型CSV文件?解决内存溢出问题

处理大CSV文件的内存友好方案

针对大文件无法全量加载导致的内存溢出问题,下面提供两种高效的落地解决方案:

方法一:Pandas分块读取处理

利用Pandas的chunksize参数将文件拆分成小批量逐块处理,避免一次性占用过多内存:

import pandas as pd

# 分块大小,根据自身内存情况调整(比如1万行/块)
chunksize = 10000
output_file = 'processed_file.csv'
first_write = True

# 逐块读取并处理
for chunk in pd.read_csv('large_file.csv', chunksize=chunksize):
    # 按条件筛选行
    filtered_chunk = chunk[(chunk['age'] > 30) & (chunk['salary'] > 50000)]
    # 新增bonus列
    filtered_chunk['bonus'] = 0.1 * filtered_chunk['salary']
    # 写入结果文件:第一块写入表头,后续块追加且不重复写表头
    filtered_chunk.to_csv(
        output_file,
        index=False,
        mode='w' if first_write else 'a',
        header=first_write
    )
    first_write = False

注意事项

  • chunksize的值可灵活调整:内存充足时调大以提升处理效率,内存紧张时调小避免溢出。
  • 必须控制表头写入逻辑,否则结果文件会重复出现表头行。

方法二:使用Dask处理

Dask是专为大数据设计的并行计算框架,语法和Pandas高度兼容,自动实现分块和并行处理:

import dask.dataframe as dd

# 读取大CSV,Dask会自动按内存情况分块
ddf = dd.read_csv('large_file.csv')

# 筛选行(语法和Pandas完全一致)
filtered_ddf = ddf[(ddf['age'] > 30) & (ddf['salary'] > 50000)]
# 新增bonus列
filtered_ddf['bonus'] = 0.1 * filtered_ddf['salary']

# 保存为单个CSV文件,compute()会触发实际计算
filtered_ddf.to_csv('processed_file_dask.csv', index=False, single_file=True)

优势说明

  • 无需手动设置分块大小,Dask会根据系统内存自动优化分块策略。
  • 支持多核心并行处理,在多核机器上能显著提升处理速度。
  • single_file=True确保输出为单个CSV文件,若省略则会生成多个分块文件(适合超大规模数据场景)。

内容的提问来源于stack exchange,提问作者Adhidev A S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:13:19