memory_usage函数返回的是每列或整个DataFrame所占内存的字节数,单位是字节(bytes);默认返回Series,deep=True且index=False时可能返回int。

memory_usage函数返回的是什么,单位是什么
memory_usage 返回的是每个列(或整个 DataFrame)所占内存的字节数,类型是 Series(默认按列)或 int(加 deep=True 且 index=False 时可能为标量)。单位始终是字节(bytes),不是 KB 或 MB —— 这点容易误读。
常见错误:直接打印 df.memory_usage() 看到一串数字就以为是“KB”,结果误判内存压力。实际得手动换算:
df.memory_usage(deep=True).sum() / 1024**2 # 转成 MB
deep=True 和 deep=False 的区别到底在哪
关键在是否计算对象(object 类型)内部引用内容的内存。默认 deep=False 只算指针开销(约 8 字节/元素),对字符串、列表等几乎不计真实体积;deep=True 才真正遍历每个字符串的字符、每个字典的键值对等,耗时但准确。
- 数值列(
int64,float64):两种模式结果一致 -
object列(如文本):deep=False常返回极小值(比如 800KB),deep=True可能飙升到 200MB+ - 含
category或string类型:也必须deep=True才反映真实占用
为什么 sum() 之前要加 deep=True
因为 df.memory_usage().sum() 默认是 deep=False,对非数值列严重低估。尤其当 DataFrame 含大量文本或嵌套结构时,这个总和可能比真实内存小一个数量级。
立即学习“Python免费学习笔记(深入)”;
仅使用 Python 将 Claw Code 虚拟化框架与 OpenClaw 集成,提供 184 种工具和 200 多条命令,用于安全分析和代码质量...
正确做法:
df.memory_usage(deep=True).sum() # ✅
错误写法:
df.memory_usage().sum() # ❌ 默认 deep=False,不可靠
注意:即使只关心某几列,也要显式传 deep=True,例如:df[['text', 'tags']].memory_usage(deep=True).sum()
实际排查内存暴涨时该看哪几行代码
不是所有 memory_usage 调用都有效。重点盯住三类操作后的内存变化:
- 读取数据后立刻查:
pd.read_csv(...)→df.memory_usage(deep=True).sum(),确认原始加载是否已膨胀 - 字符串处理后:
df['col'].str.replace(...)或.str.split().explode(),这类极易产生重复字符串对象,deep=True会暴露问题 - 类型转换后:
df.astype({'col': 'category'})或.convert_dtypes(),前后对比memory_usage(deep=True)才知是否真省了内存
一个常被忽略的点:Pandas 0.25+ 中 string dtype 比 object 更省内存,但只有 deep=True 才能验证它是否真的生效。

















