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
。