You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将DataFrame列转为category类型未节省内存?

转category后内存反而升高的原因

核心原因是你的ABN_CONTRAT列唯一值占比极高,几乎没有重复内容。

pandas的category类型能节省内存的前提是列中存在大量重复字符串:它会把重复字符串映射成整数存储,只保留一份唯一字符串列表,再用整数数组记录每行对应的索引。但如果列里的字符串几乎都是唯一的(比如每个值都不一样),就会出现反效果:

  • 整数数组需要用足够大的整数类型存储所有唯一值的索引(比如唯一值超过2^32时,得用64位整数,和原object类型的指针大小一致)
  • 还要额外存储所有唯一字符串的列表,这部分会增加额外内存占用

从你的数据可以计算验证:

  • 原ABN_CONTRAT列内存15218784字节,对应行数为 15218784 / 8 = 1902348行(64位系统中object类型每个元素是8字节指针)
  • 转category后内存28190544字节,显然是整数数组的大小加上唯一字符串的总大小,超过了原指针内存的总和。

你可以用以下代码确认唯一值占比:

# 查看唯一值数量
unique_count = df1['ABN_CONTRAT'].nunique()
# 查看总行数
total_rows = len(df1)
# 计算占比
ratio = unique_count / total_rows
print(f"唯一值占比: {ratio:.2%}")

如果占比接近100%,category完全不适合这个列。只有当唯一值占比很低(比如低于10%)时,使用category才能有效节省内存。

内容的提问来源于stack exchange,提问作者pacdev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:25:15