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

为什么使用pandas分块读取大体积CSV的方法被判定为效率不高?

代码存在的核心问题
  • chunksize设置不合理:你设置的chunksize=100过小,会导致频繁触发磁盘IO和小块计算逻辑,整体运行效率远低于合理块大小的实现,通常chunksize需要根据机器可用内存调整到10万~100万行级别,最大化单次IO读取的有效数据量。
  • 中间结果全量留存:你将所有分块的聚合结果都存入pieces列表,若部门的去重数量极多,该列表依然会占用大量内存,极端场景下还是会出现内存溢出问题,没有完全解决超大文件的内存限制问题。同时拼接所有中间结果的pd.concat操作本身也会产生额外的内存和计算开销。
  • 聚合逻辑可优化:拼接所有中间结果后再做全局groupby的逻辑,可以优化为流式累加,不需要留存所有分块的聚合结果,处理完一个分块就直接更新全局聚合值,内存占用只会和去重后的部门数量挂钩,和原文件大小完全无关。
优化实现方案

你可以采用边读分块边更新全局聚合结果的逻辑,不需要留存所有中间块的聚合结果,内存占用更低,运行效率更高:

import pandas as pd

# 初始化全局聚合结果字典,key为部门名称,value为销售总和
global_agg = {}
# 根据机器可用内存调整chunksize,示例为10万行
chunksize = 10 ** 5

for chunk in pd.read_csv(file, usecols=['Department Name', 'Number of sales'], chunksize=chunksize):
    # 计算当前分块的聚合结果
    chunk_agg = chunk.groupby('Department Name')['Number of sales'].sum()
    # 累加更新到全局结果
    for dept, sales_sum in chunk_agg.items():
        global_agg[dept] = global_agg.get(dept, 0) + sales_sum

# 转换为DataFrame后输出到CSV
result = pd.DataFrame.from_dict(
    global_agg, 
    orient='index', 
    columns=['Total Number of Sale']
)
result.index.name = 'Department Name'
result.to_csv('output.csv')

如果去重后的部门数量仍然过大,内存无法容纳,还可以直接用Python内置的csv模块逐行读取处理,内存占用会进一步降低。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:57:03