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

参考来源:https://mp.weixin.qq.com/s?__biz=MzkyODIzMDczMQ==&mid=2247484032&idx=1&sn=96ed1fbb86a1a1edf23c6e03c803cf57&chksm=c21abea4f56d37b24a9823f2ddf21092d903b83f7890c5496023e6ea16fba497bdc38bcfb213&cur_album_id=2864481100214026240&scene=189#wechat_redirect

posted @ 2023-05-15 16:39  小杨的冥想课  阅读(173)  评论(0编辑  收藏  举报