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)
上一篇下一篇

猜你喜欢

热点阅读