pandas.factorize # 熊猫。因式分解(值, sort = False , use_na_sentinel = True , size_hint = None ) [来源] # 将对象编码为枚举类型或分类变量。 当最重要的是识别不同的值时,此方法对于获取数组的数字表示非常有用。Factorize 既可用作顶级函数pandas.factorize(),也可用作方法Series.factorize()和Index.factorize()。 参数: 值序列一维序列。不是 pandas 对象的序列在分解之前被强制转换为 ndarray。 排序bool,默认 False对唯一值进行排序并打乱代码以维持关系。 use_na_sentinel bool, 默认 True如果为 True,则标记 -1 将用于 NaN 值。如果为 False,NaN 值将被编码为非负整数,并且不会从值的唯一值中删除 NaN。 1.5.0 版本中的新增内容。 size_hint int,可选提示哈希表大小调整器。 返回: 代码ndarray一个整数 ndarray,它是uniques的索引器。 将具有与valueuniques.take(codes)相同的值。 uniques ndarray、索引或分类唯一的有效值。当value为 Categorical 时,uniques 为 Categorical。当values是其他pandas对象时, 返回一个Index 。否则,返回一维 ndarray。 笔记 即使value中缺少值,uniques也不会 包含该值的条目。 也可以看看 cut离散化连续值数组。 unique查找数组中的唯一值。 笔记 请参阅用户指南以获取更多示例。 例子 这些示例都表明分解是一种顶级方法,例如 pd.factorize(values).对于诸如 之类的方法,结果是相同的 Series.factorize()。 >>> codes, uniques = pd.factorize(np.array(['b', 'b', 'a', 'c', 'b'], dtype="O")) >>> codes array([0, 0, 1, 2, 0]) >>> uniques array(['b', 'a', 'c'], dtype=object) 使用sort=True,将对唯一值进行排序,并且对代码进行打乱,以便维持关系。 >>> codes, uniques = pd.factorize(np.array(['b', 'b', 'a', 'c', 'b'], dtype="O"), ... sort=True) >>> codes array([1, 1, 0, 2, 1]) >>> uniques array(['a', 'b', 'c'], dtype=object) 当(默认)时,缺失值在带有哨兵值的代码use_na_sentinel=True中指示,并且缺失值不包含在uniques中。-1 >>> codes, uniques = pd.factorize(np.array(['b', None, 'a', 'c', 'b'], dtype="O")) >>> codes array([ 0, -1, 1, 2, 0]) >>> uniques array(['b', 'a', 'c'], dtype=object) 到目前为止,我们只分解了列表(在内部强制转换为 NumPy 数组)。当分解 pandas 对象时,唯一值的类型 会有所不同。对于分类,返回分类。 >>> 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.categoriescat.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 包含在值的唯一性中,可以通过设置 来实现use_na_sentinel=False。 >>> values = np.array([1, 2, 1, np.nan]) >>> codes, uniques = pd.factorize(values) # default: use_na_sentinel=True >>> codes array([ 0, 1, 0, -1]) >>> uniques array([1., 2.]) >>> codes, uniques = pd.factorize(values, use_na_sentinel=False) >>> codes array([0, 1, 0, 2]) >>> uniques array([ 1., 2., nan])