讲师中心 微信公众号
AI工具推荐 视频效率加速

如何在内存受限环境下高效执行 Pandas 分组聚合操作

夏杰姑娘_9099

夏杰姑娘_9099

发布时间:2026-11-03 09:35:09

|

936人浏览过

|

来源于php中文网

原创

如何在内存受限环境下高效执行 Pandas 分组聚合操作

本文介绍在仅 8gb 内存条件下,对十万行级以上 csv 数据进行高效分组求和的多种优化方案,涵盖原生 python 流式处理、pandas 增量优化、dask 调优及替代工具选型,兼顾性能、可维护性与内存安全。

本文介绍在仅 8gb 内存条件下,对十万行级以上 csv 数据进行高效分组求和的多种优化方案,涵盖原生 python 流式处理、pandas 增量优化、dask 调优及替代工具选型,兼顾性能、可维护性与内存安全。

当面对大型 CSV 数据(如 10 万+ 行)并需按字段(如 ID)聚合(如 sum)时,直接使用 pd.read_csv().groupby().agg() 往往触发内存峰值——Pandas 默认将整表载入内存并构建索引/分组器,极易耗尽 8GB 限制。单纯切换为 Dask 或分块读取(chunksize)若未精细调优,也常因元数据开销、重复计算或调度延迟而收效甚微。以下提供层次化解决方案,按推荐优先级排序:

✅ 首选:流式字典聚合(极致内存效率)

若聚合逻辑简单(如单字段 sum/count/mean),绕过 Pandas,用纯 Python 流式处理是最轻量、最可控的方式:

# 示例:按 ID 累加 Value,内存占用 ≈ O(唯一ID数)
sums = {}
with open("large_file.csv", "r", encoding="utf-8") as f:
    next(f)  # 跳过表头(如有)
    for line in f:
        if not line.strip():
            continue
        # 根据实际分隔符调整:','、'\t' 或 ';'
        parts = line.strip().split(",")  
        try:
            id_val, value = parts[0].strip(), float(parts[1].strip())
            sums[id_val] = sums.get(id_val, 0.0) + value
        except (IndexError, ValueError):
            continue  # 跳过格式异常行

# 构建结果 DataFrame(仅在需要时)
import pandas as pd
result_df = pd.DataFrame(list(sums.items()), columns=["ID", "Value"])
# 或直接写入 CSV 节省内存
with open("aggregated_result.csv", "w") as f:
    f.write("ID,Value\n")
    for id_val, total in sorted(sums.items()):
        f.write(f"{id_val},{total}\n")

优势:内存恒定(仅存储键值对),无依赖,10GB 文件可在百 MB 内存下完成;注意:确保 ID 类型一致(如全转为字符串避免哈希冲突),并预估唯一 ID 数量——若超千万级,考虑改用 sqlite3 或 blist 等扩展结构。

⚙️ 进阶优化:Pandas 增量式分块聚合

若必须使用 Pandas(如需多聚合函数、类型推断或后续分析),请严格遵循以下原则:

# 1. 限定列 + 指定 dtype(关键!减少内存 40%+)
dtype = {"ID": "category", "Value": "float32"}  # 避免 object 类型
chunk_iter = pd.read_csv(
    "large_file.csv",
    usecols=["ID", "Value"],  # 只读必需列
    dtype=dtype,
    chunksize=50000  # 根据内存调整:通常 10k–100k 行/块
)

# 2. 分块聚合后合并再全局聚合(避免中间 DataFrame 膨胀)
partial_results = []
for chunk in chunk_iter:
    partial_results.append(chunk.groupby("ID", observed=True)["Value"].sum())
final_result = pd.concat(partial_results).groupby(level=0).sum()  # observed=True 加速 category 分组

# 3. 输出时重置索引,避免冗余
result_df = final_result.reset_index(name="Value")

关键技巧:

  • usecols 和 dtype 减少初始内存占用;
  • observed=True 在 category 类型下跳过未出现的类别,提速 2–5 倍;
  • chunksize 需实测:过大仍会 OOM,过小增加 I/O 开销。

? 替代方案评估

  • Dask DataFrame:适合复杂多阶段流水线,但单次 groupby().sum() 的调度开销可能高于收益。务必设置 npartitions 匹配 CPU 核心数,并启用 persist() 缓存中间结果。
  • Polars:Rust 实现,内存效率接近流式处理,语法类似 Pandas:
    pl.scan_csv("large_file.csv").group_by("ID").agg(pl.col("Value").sum()).collect() —— 推荐作为 Pandas 替代首选。
  • SQLite:将 CSV 导入临时数据库,用 SQL 聚合:CREATE TABLE t(ID TEXT, Value REAL); ... SELECT ID, SUM(Value) FROM t GROUP BY ID; —— 稳定可靠,支持索引加速。

? 总结建议

  • 简单聚合(sum/count)→ 用流式字典:最快、最省内存、最易调试;
  • 需 Pandas 生态 → 严格控制 dtype + usecols + 分块合并;
  • 长期项目 → 迁移至 Polars 或 DuckDB:二者在大数据聚合场景下性能与内存表现全面优于 Pandas;
  • 永远避免:pd.read_csv() 全量加载 + 直接 groupby,尤其在内存敏感环境。

选择方案前,请先用 pandas.memory_usage(deep=True).sum() 检查原始 DataFrame 内存占用,针对性优化才能事半功倍。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

码上飞
码上飞 Hot

一款基于自然语言的AI应用开发平台,可根据用户描述自动生成应用程序,帮助个人和团队快速完成应用原型与开发。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

1851

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

5024

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

1809

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

30217

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3587

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

3607

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

1243

2023.08.11

python合并两个列表
python合并两个列表

Python是一种强大的编程语言,具有许多方便的功能和工具。在Python中,有多种方法可以合并两个列表。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

616

2023.08.10

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

20

2026.11.02

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn