pandas.factorize #

熊猫。因式分解(, sort = False , use_na_sentinel = True , size_hint = None ) [来源] #

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

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

参数
序列

一维序列。不是 pandas 对象的序列在分解之前被强制转换为 ndarray。

排序bool,默认 False

对唯一值进行排序并打乱代码以维持关系。

use_na_sentinel bool, 默认 True

如果为 True,则标记 -1 将用于 NaN 值。如果为 False,NaN 值将被编码为非负整数,并且不会从值的唯一值中删除 NaN。

1.5.0 版本中的新增内容。

size_hint int,可选

提示哈希表大小调整器。

返回
代码ndarray

一个整数 ndarray,它是uniques的索引器。 将具有与valueuniques.take(codes)相同的值。

uniques ndarray、索引或分类

唯一的有效值。当value为 Categorical 时,uniques 为 Categorical。当values是其他pandas对象时, 返回一个Index 。否则,返回一维 ndarray。

笔记

即使value中缺少值,uniques也不会 包含该值的条目。

也可以看看

cut

离散化连续值数组。

unique

查找数组中的唯一值。

笔记

请参阅用户指南以获取更多示例。

例子

这些示例都表明分解是一种顶级方法,例如 pd.factorize(values).对于诸如 之类的方法,结果是相同的 Series.factorize()

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

使用sort=True,将对唯一值进行排序,并且对代码进行打乱,以便维持关系。

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

当(默认)时,缺失值在带有哨兵值的代码use_na_sentinel=True中指示,并且缺失值不包含在uniques中。-1

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

到目前为止,我们只分解了列表(在内部强制转换为 NumPy 数组)。当分解 pandas 对象时,唯一值的类型 会有所不同。对于分类,返回分类。

>>> 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.categoriescat.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 包含在值的唯一性中,可以通过设置 来实现use_na_sentinel=False

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