pandas.Series.factorize#

Series.factorize(sort=False, na_sentinel=- 1)[源代码]#

将对象编码为枚举类型或类别变量。

当最重要的是标识不同的值时,此方法对于获取数组的数字表示很有用。 factorize 既可用作顶级函数,也可用作 pandas.factorize() ,并作为一种方法 Series.factorize()Index.factorize()

参数
sort布尔值,默认为False

排序 uniques 和洗牌 codes 来维持这段关系。

na_sentinel整型或无,默认为-1

标记为“未找到”的值。如果无,则不会从值的唯一性中删除NAN。

在 1.1.2 版更改.

退货
codesndarray

作为索引器的整数ndarray uniquesuniques.take(codes) 将具有与 values

uniquesNdarray、索引或分类

唯一的有效值。什么时候 values 是绝对的, uniques 是一种绝对的。什么时候 values 是一些其他的Pandas物体,一个 Index 被归还了。否则,将返回一维ndarray。

备注

即使中有缺失的值 valuesuniques 将要 not 包含它的条目。

参见

cut

离散化连续值数组。

unique

查找数组中的唯一值。

注意事项

参考文献 the user guide 查看更多示例。

示例

这些示例都将因式分解显示为顶级方法,如下所示 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)

Missing values are indicated in codes with na_sentinel (-1 by default). Note that missing values are never included in 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])