pandas里数据结构Category
2019-03-08 本文已影响0人
崔吉龙
问题描述
在机器学习中,我们经常要用到一些类变量(分类变量),比如小汽车有三种颜色供用户选择(red, blue,yellow),那么在进行机器学习的算法计算时,我们需要把这些字符型类别用具体的数字表示,比如0代表red、1代表blue、2代表yellow。类变量Category应运而生。
转化类变量
最简单的模式,就是直接使用Categorical进行类别编码
In [206]: import pandas as pd
...: data = ['a','a','b','c','c']
...: print(data)
['a', 'a', 'b', 'c', 'c']
# list直接编码成类变量
In [207]: cat_data = pd.Categorical(data)
...: print(cat_data)
[a, a, b, c, c]
Categories (3, object): [a, b, c]
# 编码之后的结果
cat_data.codes
Out[208]: array([0, 0, 1, 2, 2], dtype=int8)
# 类别映射表
cat_data.categories
Out[209]: Index(['a', 'b', 'c'], dtype='object')
当然我们也可以做的稍微复杂点,就是可以指定类别映射表。
In [210]: car_colors = ['Blue', 'Red', 'Green']
...: car_data = ['Blue','Green','Red','Blue','Red']
...: cat_car = pd.Categorical(car_data, categories=car_colors)
...: print(cat_car)
[Blue, Green, Red, Blue, Red]
Categories (3, object): [Blue, Red, Green]
In [211]: cat_car.codes
Out[211]: array([0, 2, 1, 0, 1], dtype=int8)
In [212]: cat_car.categories
Out[212]: Index(['Blue', 'Red', 'Green'], dtype='object')
我们可以动态修改类别映射表
In [214]: cat_car.categories = ['Purple','Yellow','Mauve']
...: print(cat_car)
[Purple, Mauve, Yellow, Purple, Yellow]
Categories (3, object): [Purple, Yellow, Mauve]
# codes没有变化,只是类别名称变了
In [215]: cat_car.codes
Out[215]: array([0, 2, 1, 0, 1], dtype=int8)