maxframe.dataframe.Index.factorize#
- Index.factorize(sort=False, use_na_sentinel=True)#
将对象编码为枚举类型或分类变量。
当只需要识别不同值时,此方法对于获取数组的数值表示很有用。factorize 既可作为顶级函数
pandas.factorize()使用,也可作为方法Series.factorize()和Index.factorize()使用。- 参数:
- 返回:
参见
cut离散化连续值数组。
unique在数组中查找唯一值。
备注
参考 用户指南 获取更多示例。
示例
这些示例都显示了factorize作为顶级方法,如
pd.factorize(values)。对于像Series.factorize()这样的方法,结果是相同的。>>> import maxframe.tensor as mt >>> import maxframe.dataframe as md >>> codes, uniques = md.factorize(mt.array(['b', 'b', 'a', 'c', 'b'], dtype="O")) >>> codes.execute() array([0, 0, 1, 2, 0]) >>> uniques.execute() array(['b', 'a', 'c'], dtype=object)
使用
sort=True,`uniques`将被排序,`codes`将被打乱以保持关系。>>> codes, uniques = md.factorize(mt.array(['b', 'b', 'a', 'c', 'b'], dtype="O"), ... sort=True) >>> codes.execute() array([1, 1, 0, 2, 1]) >>> uniques.execute() array(['a', 'b', 'c'], dtype=object)
当
use_na_sentinel=True(默认值)时,缺失值在`codes`中用标记值-1表示,缺失值不会包含在 `uniques`中。>>> codes, uniques = md.factorize(mt.array(['b', None, 'a', 'c', 'b'], dtype="O")) >>> codes.execute() array([ 0, -1, 1, 2, 0]) >>> uniques.execute() array(['b', 'a', 'c'], dtype=object)
到目前为止,我们只对列表进行了因子化(内部被强制转换为NumPy数组)。在对pandas对象进行因子化时,uniques`的类型会有所不同。对于 Categoricals,返回`Categorical。
>>> cat = md.Categorical(['a', 'a', 'c'], categories=['a', 'b', 'c']) >>> codes, uniques = md.factorize(cat) >>> codes.execute() array([0, 0, 1]) >>> uniques.execute() ['a', 'c'] Categories (3, object): ['a', 'b', 'c']
注意,尽管``'b'``不在``cat.values``中,但它在``uniques.categories``中。
对于所有其他pandas对象,返回适当类型的Index。
>>> cat = md.Series(['a', 'a', 'c']) >>> codes, uniques = md.factorize(cat) >>> codes.execute() array([0, 0, 1]) >>> uniques.execute() Index(['a', 'c'], dtype='object')
如果值中包含NaN,并且我们希望在值的唯一值中包含NaN,可以通过设置
use_na_sentinel=False来实现。>>> values = mt.array([1, 2, 1, mt.nan]) >>> codes, uniques = md.factorize(values) # default: use_na_sentinel=True >>> codes.execute() array([ 0, 1, 0, -1]) >>> uniques.execute() array([1., 2.])
>>> codes, uniques = md.factorize(values, use_na_sentinel=False) >>> codes.execute() array([0, 1, 0, 2]) >>> uniques.execute() array([ 1., 2., nan])