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的索引器。 将具有与value
uniques.take(codes)
相同的值。- uniques ndarray、索引或分类
唯一的有效值。当value为 Categorical 时,uniques 为 Categorical。当values是其他pandas对象时, 返回一个Index 。否则,返回一维 ndarray。
笔记
即使value中缺少值,uniques也不会 包含该值的条目。
笔记
请参阅用户指南以获取更多示例。
例子
这些示例都表明分解是一种顶级方法,例如
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.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 包含在值的唯一性中,可以通过设置 来实现
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])