内存爆了应优先用dtype降级和usecols筛选列,再考虑chunksize分块读取;避免list(reader)全加载,每块处理后立即聚合或写盘,分类字段转category可降内存80%。

内存爆了,pandas.read_csv 直接卡死怎么办
别硬扛,pandas.read_csv 默认把整张表全读进内存,几 GB 的 CSV 一上手就 MemoryError。核心解法就两条:分块读 + 边读边算,不存原始全量数据。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 用
chunksize参数,比如pd.read_csv("data.csv", chunksize=50000),返回的是可迭代的TextFileReader对象,每次只拿 5 万行 - 千万别写
chunks = list(reader)—— 这等于又全加载进内存了 - 每块处理完立刻聚合或写磁盘:
chunk.groupby("user_id")["amount"].sum().to_frame(),再.append()到汇总结果(注意用pd.concat替代反复append) - 如果只是统计,直接用
dtype指定列类型(见下一条),能省 50%+ 内存,比 chunksize 更快见效
dtype 不设对,int64 和 object 是内存杀手
默认情况下,pandas 把数字全当 int64 或 float64,字符串全当 object(实际存的是指针数组),这两类最吃内存。降级不是“省点”,是“救命”。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 数值列看取值范围:全在 0–255 就用
uint8;-32768 到 32767 用int16;别无脑int64 - 分类字段(如省份、状态码)优先转
category:dtype={"status": "category"},重复值多时内存直降 80% - 字符串列如果只是做等值匹配(非全文搜索),且唯一值 category;否则考虑先
str.slice(0, 20)截断再转 - 时间列不用
object存字符串,强制用parse_dates=["ts"]+infer_datetime_format=True,内存减半且后续计算更快
分块读完还要合并?小心 pd.concat 二次爆炸
很多人分块读完,用 pd.concat(chunks, ignore_index=True) 一把梭,结果内存翻倍——因为 concat 要申请新空间,旧 chunk 还没被 GC 掉。
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 真需要全量 DataFrame,先用
dtype降级 +usecols只读必要列,再分块读进一个预分配的list,最后单次pd.concat - 更推荐流式聚合:比如求总和,就初始化
total = 0,每块算chunk["x"].sum()累加;求分组统计,用defaultdict或Counter累加字典,完全绕过 DataFrame - 如果必须存中间结果,写
parquet(用pyarrow引擎)比csv快 3 倍、小 70%,且支持按列读取,后续分析不用全载入
read_csv 以外的轻量替代:什么时候该换工具
当 CSV 超过 10GB、列数超 200、或者你只需要其中几行几列时,pandas.read_csv 已经不是最优解。
实操建议:
立即学习“Python免费学习笔记(深入)”;
- 只抽样看数据?用系统命令:
head -n 10000 data.csv > sample.csv,再用 pandas 读这个小文件 - 只读某几列?用
usecols=[0, 2, 5]或usecols=["id", "price"],跳过解析其余列,速度提升明显 - 列特别宽(>500 列)且稀疏?考虑
polars:pl.read_csv("data.csv", dtypes={"col1": pl.Int32}),内存更省、并行解析更快,API 类似 pandas 但设计更面向大数据 - 真到百 GB 级,别死磕单机:用
dask.dataframe或vaex,它们天然惰性求值,.compute()才真正执行,但要注意——它们对某些操作(如复杂 apply)支持有限,别等跑完才发现不兼容
最常被忽略的一点:降级 dtype 和删冗余列(usecols)带来的收益,往往远超换工具或调大 chunksize。先做这两步,再决定要不要上更重的方案。

















