maxframe.dataframe.Series.factorize#
- Series.factorize(sort=False, use_na_sentinel=True)#
将对象编码为枚举类型或分类变量。
当唯一重要的是识别不同值时,此方法对于获取数组的数字表示很有用。factorize 既可以作为顶级函数
pandas.factorize()使用,也可以作为Series.factorize()和Index.factorize()方法使用。- 参数:
- 返回:
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])