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

如何处理Python Pandas在处理大数据集时出现的MemoryError?

雨枫君_3875

雨枫君_3875

发布时间:2026-07-10 09:34:26

|

266人浏览过

|

来源于php中文网

原创

MemoryError 是因数据过载内存所致,非 Pandas Bug;应通过 chunksize 分块读取、优化数据类型、避免隐式膨胀操作及清理残留引用等方式控制内存驻留量。

如何处理python pandas在处理大数据集时出现的memoryerror?

直接说结论:MemoryError 不是 Pandas 有 bug,而是你一次性让太多数据进了内存——哪怕只多载入几 MB,它就崩。关键不是“换库”,而是控制每一步的内存驻留量。

用 chunksize 分块读取 CSV,别碰全量 read_csv()

这是最常被跳过的一步。很多人设了 chunksize=10000,但还在外面写 df = pd.read_csv('big.csv'),等于完全没用。

  • 必须把 chunksize 当作读取逻辑的一部分,而不是后期优化开关
  • 每次迭代中,chunk 是独立 DataFrame,上一块处理完后立刻丢弃(不 append 到大 list 里存着)
  • 如果要做全局统计(比如总和、均值),用累加器变量代替拼接:total_sum += chunk['col'].sum(),而不是 chunks.append(chunk)
  • 注意:chunksize 不是越大越好。8GB 内存机器建议从 5000–20000 行起步,配合 memory_usage='deep' 实测峰值

改掉默认 object 和 float64,类型不对等于白省

一个含百万行、50 列字符串的 object 列,实际内存可能比整张表还高——因为每个字符串单独分配堆内存,且无共享引用。

  • 重复值多的字符串列(如状态、地区、分类)→ 强制转 category:df['status'] = df['status'].astype('category')
  • 整数列看取值范围:0–255 用 uint8,-32768–32767 用 int16,别死守 int64
  • datetime 列务必指定 parse_dates + infer_datetime_format=True,否则会退化成 object
  • 检查手段:df.info(memory_usage='deep'),重点关注 memory usage 行,不是 dtypes 表面信息

避免 .T、.groupby().apply()、.pivot() 这类隐式膨胀操作

这些方法本身不报错,但内部会构建临时结构——out.T 可能瞬间申请和原 DataFrame 等大的新内存,groupby().apply(lambda x: x * 2) 会为每组复制一份子 DataFrame。

Python Dependency Candidate Fetcher 2
Python Dependency Candidate Fetcher 2

根据包的能力以及 Jupyter 环境中的导入语句,从候选列表中挑选最适合用户表格工作流的 Python 包。

下载

立即学习“Python免费学习笔记(深入)”;

  • 替代 .T.groupby().sum().T:改用 df.groupby(...).sum(numeric_only=True),跳过转置
  • 避免 .apply() 在大表上逐行调用函数;优先用向量化操作或 .agg()
  • 不用 .pivot() 做宽表展开,改用 pd.crosstab() 或分块 pd.get_dummies() + sparse=True
  • 警惕 .copy() 和 .values:后者强制转 ndarray,稀疏结构瞬间变稠密

别信 IDE 自动补全,关掉 Jupyter 的 autoreload 和变量历史缓存

很多人在 VS Code 或 Jupyter 里反复运行同一段代码,以为只是重跑,其实 df 变量一直挂在内核里,gc.collect() 也清不干净——尤其用了 %store 或 IPython.cache。

  • Jupyter 中执行 %reset -f 清空全部命名空间,比 del df 可靠得多
  • VS Code 的 Python 扩展默认启用变量监视器,对 >10 万行 DataFrame 会偷偷做摘要计算,关掉设置项:python.dataScience.variableExplorerExclude
  • PyCharm 用户注意:Settings > Tools > Python Console > Use IPython 关闭,否则历史变量全驻留
  • 真正危险的是你以为“删了就没了”,但 plt.plot(df.x, df.y) 后 matplotlib 仍持有引用,得显式 plt.close('all')

最易被忽略的一点:内存问题往往不出现在你写的主逻辑里,而出现在日志打印、异常 traceback、甚至 df.head() 的预览触发中——它们会强制加载索引、计算长度、生成 HTML 表格。处理前先关掉所有自动展示,用 len(df) 和 df.dtypes 替代 df.info()。

热门AI工具

更多
SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

DeepSeek

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

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

Flowith
Flowith Hot

Flowith是一款基于画布和智能体工作流的 AI 协作工作空间。

豆包大模型

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

WorkBuddy

一款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教程的相关文章,大家可以免费体验学习。

30257

2023.08.03

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

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

3607

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

Tailwind CSS 如何制作导航栏和卡片
Tailwind CSS 如何制作导航栏和卡片

用 Tailwind CSS 制作导航栏和卡片,可先搭建语义化结构,再组合 Flex、Grid、间距、圆角与阴影类。这里整理横向导航、移动端菜单、卡片网格及悬停效果的相关文章,帮助你把常见页面组件做得清晰且适配不同屏幕。

0

2026.11.03

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Pandas 教程
Pandas 教程

共15课时 | 1.9万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 0.1万人学习

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

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