最近在数据处理过程中遇到 pd.Categorical() 因此特地查了一下
先给出官网的链接
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Categorical.html
我们直接通过例子来学习
In [16]: st = ['a','a','b','c','c']
In [17]: ss = pd.Categorical(st)
In [18]: ss
Out[18]:
[a, a, b, c, c]
Categories (3, object): [a, b, c]
In [22]: ss.dtype
Out[22]: CategoricalDtype(categories=['a', 'b', 'c'], ordered=False)
这里就可以看到 categorical 实际上是计算一个列表型数据中的类别数,即不重复项,它返回的是一个CategoricalDtype 类型的对象,相当于在原来数据上附加上类别信息 ,
具体的类别可以通过和对应的序号可以通过 codes 和 categories 来查看:
In [23]: ss.codes
Out[23]: array([0, 0, 1, 2, 2], dtype=int8)
In [21]: ss.categories
Out[21]: Index(['a', 'b', 'c'], dtype='object')
那么在实际应用中 我们常常是结合他的 codes 属性来一起使用的 , 即
pd.Categorical( list ).codes 这样就可以直接得到原始数据的对应的序号列表,通过这样的处理可以将类别信息转化成数值信息 ,这样就可以应用到模型中去了 另外更加详细的功能参考官网。
其实看到这里 可以发现 Categorical 的功能和 之前在机器学习 数据处理部分提到的 LabelEncoder (https://blog.csdn.net/weixin_38656890/article/details/80849334)
的功能是一样的, 不过 Categorical 是对自己编码 ,而LabelEncoder 是通过通过一个样本 制成标准 然后 对其他样本编码,因而相对的更加灵活。
更新: