pandas.Categorical()函数的理解
pandas.Categorical(values,categories = None,ordered = None,dtype = None )
首先看看官方的参数解释:
values | list-likeThe values of the categorical. If categories are given, values not in categories will be replaced with NaN. |
---|---|
categories | Index-like (unique), optional The unique categories for this categorical. If not given, the categories are assumed to be the unique values of values (sorted, if possible, otherwise in the order in which they appear) |
ordered | bool, default False Whether or not this categorical is treated as a ordered categorical. If True, the resulting categorical will be ordered. An ordered categorical respects, when sorted, the order of its categories attribute (which in turn is the categories argument, if provided). |
dtype | CategoricalDtype An instance of CategoricalDtype to use for this categorical New in version 0.21.0. |
值:类似列表。分类的值,如果给出了类别,则不在类别中的值将替换为NaN。
类别:索引式(唯一),可选。此分类的唯一类别。如果没有给出,则假定类别是值的唯一值。
ordered:布尔值,(默认为False)。若设为True则启用排序。
dtype:若使用此函数生成一个实例,返回一个CategoricalDtype类型
下面看看实例:
import pandas as pds1=[\'a\',\'a\',\'b\',\'d\',\'c\']s2 = [1,4,4,3,7]ss0=pd.Categorical(s1,categories=[\'d\',\'b\',\'c\'])ss1 = pd.Categorical(s1)ss2 =pd.Categorical(s2)print(ss0)print(ss1)print(ss2)print(\'-------------------\')print(ss0.codes)print(ss1.codes)print(ss2.codes)
结果
[NaN, NaN, b, d, c]Categories (3, object): [d, b, c][a, a, b, d, c]Categories (4, object): [a, b, c, d][1, 4, 4, 3, 7]Categories (4, int64): [1, 3, 4, 7]-------------------[-1 -1 1 0 2][0 0 1 3 2][0 2 2 1 3]
通过codes方法可以看到,它将0到无穷当作属性,按元素大小顺序赋予给列表中每个值,相同元素赋予相同属性(即同一类具有同一属性),返回一个具有属性的新列表。
其中,Categories可以设置其中的类的个数和种类,未设置的类用NAN替换,属性默认用-1表示。
下面测试ordered为True的情况:可以通过categories定义属性序列
ss2 =pd.Categorical(s2,ordered=True,categories=[4,3,7,1])print(ss2)print(ss2.min())print(ss2.codes)ss2.categories
结果
[1, 4, 4, 3, 7]Categories (4, int64): [4 < 3 < 7 < 1]4[3 0 0 1 2]Int64Index([4, 3, 7, 1], dtype=\'int64\')
可以看到在返回的列表中,数值大小按照属性大小比较。