pandas中的catagory 类型
pandas中的catagory 类型
pandas
中的category
类型是一种用于处理分类变量的数据类型。 它可以大大提高数据处理和计算效率,并减少内存占用。
在某些情况下,数据中的一些变量只包含有限的可能取值,例如“性别”、“地区”等,这些变量可以归类为分类变量。 如果将这些变量存储为字符串或数字形式,则可能会浪费大量的内存,因为每个变量都会占据大量的空间。 这就是category类型的用处:使用category类型可以将这些变量存储为原始数据的唯一值的散列表,从而大大减少了内存占用。
除了内存优化外,category类型还提供了一些便捷的方法来处理分类变量,例如自动排序和类别之间的比较。 因此,如果数据中包含分类变量,则应该使用category类型来优化数据处理和计算效率。
下面的示例,使用中国人口统计的相关数据,默认导入之后数据情况如下:
import pandas as pd
fp = "http://databook.top:8888/pandas/cn-people.csv"
df = pd.read_csv(fp)
df
各个列的默认类型如下:
df.dtypes
其中【指标编码】和【指标中文】列的类型其实是字符串。
各个列实际占用的内存大小:
df.memory_usage(deep=True)
Index
表示索引所占用的内存大小,可以看出【指标编码】和【指标中文】占用的内存比较多,而且这两列重复数据也比较多。
尝试将【指标编码】和【指标中文】两列转换为catagory类型之后,看看内存占用是否减少。
df["指标中文"] = df["指标中文"].astype("category")
df["指标编码"] = df["指标编码"].astype("category")
df.dtypes
类型已经转换成功,看看pandas
是如何给catagory
类型编码的。
df["指标中文"].values.codes
可以看出,是用int8
类型来编码,int8
类型只占用1个字节的内存,总体应该能够节省不少内存空间。
df.memory_usage(deep=True)
【指标编码】和【指标中文】两列的内存占用只有原来的约1/200
。
记录学习的点点滴滴
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~