當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Python pandas.Index.factorize用法及代碼示例

用法:

Index.factorize(sort=False, na_sentinel=- 1)

將對象編碼為枚舉類型或分類變量。

當重要的是識別不同的值時,此方法對於獲取數組的數字表示很有用。 factorize 既可用作頂級函數 pandas.factorize() ,也可用作方法 Series.factorize()Index.factorize()

參數

sort布爾值,默認為 False

排序 uniques 並打亂 codes 以保持關係。

na_sentinelint 或無,默認 -1

標記“not found”的值。如果沒有,將不會從值的唯一性中刪除 NaN。

返回

codesndarray

一個整數 ndarray,它是 uniques 的索引器。 uniques.take(codes) 將具有與 values 相同的值。

uniquesndarray、索引或分類

唯一的有效值。當values 為分類時,uniques 為分類。當 values 是其他一些 pandas 對象時,返回一個 Index。否則,返回一維 ndarray。

注意

即使有缺失值values,uniques將要不是包含一個條目。

注意

有關更多示例,請參閱用戶指南。

例子

這些示例都將 factorize 顯示為頂級方法,例如 pd.factorize(values) 。對於像 Series.factorize() 這樣的方法,結果是相同的。

>>> codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'])
>>> codes
array([0, 0, 1, 2, 0]...)
>>> uniques
array(['b', 'a', 'c'], dtype=object)

使用 sort=True ,將對 uniques 進行排序,並打亂 codes 以保持關係。

>>> codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'], sort=True)
>>> codes
array([1, 1, 0, 2, 1]...)
>>> uniques
array(['a', 'b', 'c'], dtype=object)

codesna_sentinel (默認為 -1)中指示缺失值。請注意,缺失值永遠不會包含在 uniques 中。

>>> codes, uniques = pd.factorize(['b', None, 'a', 'c', 'b'])
>>> codes
array([ 0, -1,  1,  2,  0]...)
>>> uniques
array(['b', 'a', 'c'], dtype=object)

到目前為止,我們隻分解了列表(內部強製轉換為 NumPy 數組)。在分解 pandas 對象時,uniques 的類型會有所不同。對於分類,返回 Categorical

>>> cat = pd.Categorical(['a', 'a', 'c'], categories=['a', 'b', 'c'])
>>> codes, uniques = pd.factorize(cat)
>>> codes
array([0, 0, 1]...)
>>> uniques
['a', 'c']
Categories (3, object): ['a', 'b', 'c']

請注意,'b'uniques.categories 中,盡管 cat.values 中不存在。

對於所有其他 pandas 對象,將返回適當類型的索引。

>>> cat = pd.Series(['a', 'a', 'c'])
>>> codes, uniques = pd.factorize(cat)
>>> codes
array([0, 0, 1]...)
>>> uniques
Index(['a', 'c'], dtype='object')

如果 NaN 在值中,並且我們希望在值的唯一性中包含 NaN,則可以通過設置 na_sentinel=None 來實現。

>>> values = np.array([1, 2, 1, np.nan])
>>> codes, uniques = pd.factorize(values)  # default: na_sentinel=-1
>>> codes
array([ 0,  1,  0, -1])
>>> uniques
array([1., 2.])
>>> codes, uniques = pd.factorize(values, na_sentinel=None)
>>> codes
array([0, 1, 0, 2])
>>> uniques
array([ 1.,  2., nan])

相關用法


注:本文由純淨天空篩選整理自pandas.pydata.org大神的英文原創作品 pandas.Index.factorize。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。