04-3 pandas 中 pd.Categorical用法

luqin_發表於2018-11-01

pandas.Categorical(values,categories = None,ordered = None,dtype = None,fastpath = False )[source]
表示經典R / S-plus方式的分類變數

分類只能採用有限的,通常是固定數量的可能值(類別)。與統計分類變數相比,分類可能具有順序,但數值運算(加法,除法,…)是不可能的。

分類的所有值都在類別或np.nan中。在類別之外分配值將引發ValueError。順序由類別的順序定義,而不是值的詞彙順序。

引數:

值:類似列表。分類的值,如果給出了類別,則不在類別中的值將替換為NaN。
類別:索引式(唯一),可選。此分類的唯一類別。如果沒有給出,則假定類別是值的唯一值。
ordered:布林值,(預設為False)。此分類是否被視為有序分類。如果沒有給出,則不會訂購生成的分類。
dtype:CategoricalDtype,CategoricalDtype用於此分類的例項

舉:

ValueError異常:如果類別不驗證。
型別錯誤:如果ordered=True給出了顯式但沒有類別且 值不可排序。
下面我們來看例項:

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')

有序分類可以根據類別的自定義順序進行排序,並且可以具有最小值和最大值。

>>>c = pd.Categorical(['a','b','c','a','b','c'], ordered=True, categories=['c', 'b', 'a'])
>>> c
[a, b, c, a, b, c]
Categories (3, object): [c < b < a]
>>> c.min()
'c'

屬性

categories	這種分類的類別。
codes	此類別的類別程式碼。
ordered	類別是否具有有序關係
dtype	在CategoricalDtype此例項

相關文章