pandas.Categorical.set_categories#

Categorical.set_categories(new_categories, ordered=None, rename=False)[源代码][源代码]#

将类别设置为指定的新类别。

new_categories 可以包括新类别(这将导致未使用的类别)或删除旧类别(这将导致值设置为 NaN)。如果 rename=True,类别将简单地重命名(旧类别中少或多于项目将分别导致值设置为 NaN 或未使用的类别)。

这种方法可以用于同时执行多个操作,包括添加、删除和重新排序,因此比通过更专业的方法执行单个步骤更快。

另一方面,这种方法不进行检查(例如,在重新排序时,旧类别是否包含在新类别中),这可能导致令人惊讶的变化,例如在使用特殊字符串数据类型时,这些数据类型不认为S1字符串等于单个字符的Python字符串。

参数:
新类别Index-like

按新顺序的类别。

有序布尔值, 默认为 None

是否将分类变量视为有序分类变量。如果未指定,则不更改有序信息。

重命名布尔值, 默认为 False

新类别是否应被视为旧类别的重命名或重新排序的类别。

返回:
Categorical

新的类别将被使用,可选的顺序更改。

引发:
ValueError

如果 new_categories 不能验证为类别

参见

rename_categories

重命名类别。

reorder_categories

重新排序类别。

add_categories

添加新类别。

remove_categories

移除指定的类别。

remove_unused_categories

移除未使用的分类。

示例

对于 pandas.Series:

>>> raw_cat = pd.Categorical(
...     ["a", "b", "c", "A"], categories=["a", "b", "c"], ordered=True
... )
>>> ser = pd.Series(raw_cat)
>>> ser
0   a
1   b
2   c
3   NaN
dtype: category
Categories (3, object): ['a' < 'b' < 'c']
>>> ser.cat.set_categories(["A", "B", "C"], rename=True)
0   A
1   B
2   C
3   NaN
dtype: category
Categories (3, object): ['A' < 'B' < 'C']

对于 pandas.CategoricalIndex:

>>> ci = pd.CategoricalIndex(
...     ["a", "b", "c", "A"], categories=["a", "b", "c"], ordered=True
... )
>>> ci
CategoricalIndex(['a', 'b', 'c', nan], categories=['a', 'b', 'c'],
                 ordered=True, dtype='category')
>>> ci.set_categories(["A", "b", "c"])
CategoricalIndex([nan, 'b', 'c', nan], categories=['A', 'b', 'c'],
                 ordered=True, dtype='category')
>>> ci.set_categories(["A", "b", "c"], rename=True)
CategoricalIndex(['A', 'b', 'c', nan], categories=['A', 'b', 'c'],
                 ordered=True, dtype='category')