maxframe.dataframe.Series.factorize#

Series.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,则对NaN值使用哨兵值-1。如果为False,则NaN值将被编码为非负整数,并且不会从值的唯一值中删除NaN。

返回:

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

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

    备注

    即使 values 中存在缺失值,uniques 也不会包含它的条目。

参见

cut

离散化连续值数组。

unique

在数组中找到唯一值。

备注

参考 用户指南 获取更多示例。

示例

这些示例都显示了像 pd.factorize(values) 这样的顶级方法的factorize。像 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 的类型会有所不同。对于分类变量,返回 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'uniques.categories 中,尽管它不在 cat.values 中。

对于所有其他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])