maxframe.dataframe.Index.factorize#

Index.factorize(sort=False, use_na_sentinel=True)#

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

当只需要识别不同值时,此方法对于获取数组的数值表示很有用。factorize 既可作为顶级函数 pandas.factorize() 使用,也可作为方法 Series.factorize()Index.factorize() 使用。

参数:
  • values (sequence) -- 一维序列。非pandas对象的序列在因子化之前会被强制转换为ndarrays。

  • sort (bool, default False) -- 对`uniques`进行排序并打乱`codes`以保持关系。

  • use_na_sentinel (bool, default True) -- 如果为True,将使用-1作为NaN值的标记。如果为False,NaN值将被编码为非负整数,并且不会从值的唯一值中删除NaN。

返回:

  • codes (ndarray) -- 用作`uniques`索引器的整数ndarray。``uniques.take(codes)``将具有与`values`相同的值。

  • uniques (ndarray, Index, 或 Categorical) -- 唯一的有效值。当`values`是Categorical时,uniques`是 Categorical。当`values`是其他pandas对象时,返回`Index。否则,返回一维ndarray。

    备注

    即使`values`中有缺失值,`uniques`也*不会*为其包含条目。

参见

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])