关键是从数据类型、读取方式和操作习惯三方面精简内存:用合适 dtype(如 category、int32)省 50%+ 内存;read_csv 时用 usecols、dtype、chunksize 控制加载;操作中避免隐式复制,及时 del + gc.collect() 释放。

Python Pandas 处理大数据时容易内存爆满,关键不是换工具,而是从数据类型、读取方式和操作习惯三方面精简内存占用。
用对数据类型,省下 50% 以上内存
Pandas 默认用 int64、float64 和 object 类型读取数据,但很多列实际不需要这么“宽”。比如:ID 列可能只是 1~10000 的整数,用 int32 就够;类别字段(如省份、状态)用 category 类型可压缩 70%+ 内存;字符串列若重复值多,转 category 效果更明显。
- 检查每列 dtype 和内存占比:
df.info(memory_usage='deep') - 自动优化数值类型:
pd.to_numeric(s, downcast='unsigned')或downcast='integer' - 转换类别型字段:
df['col'] = df['col'].astype('category') - 对时间列优先用
datetime64[ns],避免存成 object 字符串
读取阶段就控制内存,别等加载完再后悔
用 pd.read_csv() 时默认把所有行、所有列全读进内存。其实多数分析只需部分数据。
95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
- 用
usecols只读需要的列,跳过无用字段(如日志中的原始 JSON 字符串) - 用
dtype参数提前指定每列类型,防止 Pandas 自动推断成高内存类型 - 大文件分块读取:
chunksize=10000,配合for chunk in pd.read_csv(...)流式处理 - 用
low_memory=False避免混合类型警告导致的重复解析开销
操作中避免隐式复制,减少临时对象
看似简单的链式操作,可能在后台生成多个完整副本。比如 df[df['x']>0].copy().reset_index(drop=True) 至少创建 2 次拷贝。
立即学习“Python免费学习笔记(深入)”;
- 用
inplace=True替代赋值(仅限支持该参数的方法,如drop()、fillna()) - 筛选后立即释放原 df 引用:
df = df[df['x']>0]; del original_df - 不用
df.assign()做大量列计算,改用直接赋值或loc批量写入 - 合并前确认 key 列已设为 category 或数值型,避免 join 时升格为 object
用完就删,显式释放不用的数据
Python 垃圾回收不保证立刻释放,尤其在 Jupyter 中变量长期存在。主动清理很有效。
- 用
del df删除大变量后,加gc.collect()强制回收(需import gc) - Jupyter 中运行
%whos查看当前变量大小,快速定位“内存大户” - 中间结果及时写入磁盘(如
to_parquet()),后续用read_parquet()按需加载列 - 避免把整个原始 DataFrame 一直保留在全局作用域,封装成函数局部变量更易回收









