pandas.Index.factorize#
- Index.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 uniques 。
uniques.take(codes)
将具有与 values 。- uniquesNdarray、索引或分类
唯一的有效值。什么时候 values 是绝对的, uniques 是一种绝对的。什么时候 values 是一些其他的Pandas物体,一个 Index 被归还了。否则,将返回一维ndarray。
备注
即使中有缺失的值 values , uniques 将要 not 包含它的条目。
注意事项
参考文献 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])