pandas从0.15版开始提供分类数据类型,用于表示统计学里有限且唯一性数据集,例如描述个人信息的性别一般就男和女两个数据常用'm'和'f'来描述,有时也能对应编码映射为0和1。血型A、B、O和AB型等选择可以映射为0、1、2、3这四个数字分别代表各个血型。pandas里直接就有categorical类型,可以有效地对数据进行分组进行相应的汇总统计工作。
当DataFrame的某列(字段)上的数据值是都是某有限个数值的集合里的值的时候,例如:性别就男和女,有限且唯一。这列可以采用Categorical Data类型来存储、统计。
pandas的Categorical Data类型灵感来源于Data wareHorsing数据仓库里的维度表设计理念,即某列数据存储的不是数据本身,而是该数据对应的编码(有称为分类、字典编码) 这些编码比数据本身存储依赖的空间小,但能基于编码统计汇总的速度要比数据本身的存储、统计速度要快。
15.1 如何理解Categorical Data?
下面看一张某水果超市的供货商表(表1):
供货商 | 水果 | 价格 |
---|---|---|
1 | apple | 5.20 |
2 | pearl | 3.50 |
3 | orange | 7.30 |
5 | apple | 5.00 |
6 | orange | 7.50 |
7 | orange | 7.30 |
9 | apple | 5.20 |
4 | pearl | 3.70 |
8 | orange | 7.30 |
第2列是各个水果供应商的能供应的水果类型,目前市场也就apple、pearl、orange
三种水果可以买到,对于一个大超市而言可能这个表很长、有很多的水果供应商,假设有1亿条数据,那么数据存储所需空间主要浪费在水果名字上了,其他字段都是数值型的数据,而水果这一列是字符串型的,很占空间,如何能降低这张大表的存储空间浪费呢? 设计一个辅助的水果编码表(表2):
编码 | 水果 |
---|---|
0 | apple |
1 | pearl | </