pandas.api.types.union_categoricals#

pandas.api.types.union_categoricals(to_union, sort_categories=False, ignore_order=False)[源代码][源代码]#

合并类似列表的分类数据,联合类别。

所有类别必须具有相同的 dtype。

参数:
to_unionlist-like

类别型,CategoricalIndex,或带有 dtype=’category’ 的 Series。

sort_categories布尔值, 默认为 False

如果为真,生成的类别将按字母顺序排序,否则它们将按它们在数据中出现的顺序排序。

ignore_order布尔值, 默认为 False

如果为真,Categoricals 的有序属性将被忽略。结果是一个无序的分类。

返回:
Categorical

被合并的类别联合。

引发:
TypeError
  • 所有输入的 dtype 并不相同

  • 所有输入并不具有相同的顺序属性

  • 所有输入都是有序的,它们的类别并不相同。

  • sort_categories=True 并且分类数据是有序的

ValueError

传递的分类列表为空

参见

CategoricalDtype

用于分类数据的类型,包含类别和有序性。

分类

以经典的 R / S-plus 风格表示分类变量。

注释

要了解更多关于类别的信息,请参见 链接

例子

如果你想合并不一定具有相同类别的分类数据,union_categoricals 将合并一个类似列表的分类数据。新的类别将是被合并类别的并集。

>>> a = pd.Categorical(["b", "c"])
>>> b = pd.Categorical(["a", "b"])
>>> pd.api.types.union_categoricals([a, b])
['b', 'c', 'a', 'b']
Categories (3, object): ['b', 'c', 'a']

默认情况下,生成的类别将按照它们在数据的 categories 中出现的顺序排列。如果你想让类别按字母顺序排序,请使用 sort_categories=True 参数。

>>> pd.api.types.union_categoricals([a, b], sort_categories=True)
['b', 'c', 'a', 'b']
Categories (3, object): ['a', 'b', 'c']

union_categoricals 也可以处理合并两个具有相同类别和顺序信息的分类变量的情况(例如,这也是你可以使用 append 的地方)。

>>> a = pd.Categorical(["a", "b"], ordered=True)
>>> b = pd.Categorical(["a", "b", "a"], ordered=True)
>>> pd.api.types.union_categoricals([a, b])
['a', 'b', 'a', 'b', 'a']
Categories (2, object): ['a' < 'b']

引发 TypeError 因为类别是有序的且不相同。

>>> a = pd.Categorical(["a", "b"], ordered=True)
>>> b = pd.Categorical(["a", "b", "c"], ordered=True)
>>> pd.api.types.union_categoricals([a, b])
Traceback (most recent call last):
    ...
TypeError: to union ordered Categoricals, all categories must be the same

通过使用 ignore_ordered=True 参数,可以合并具有不同类别或顺序的有序分类。

>>> a = pd.Categorical(["a", "b", "c"], ordered=True)
>>> b = pd.Categorical(["c", "b", "a"], ordered=True)
>>> pd.api.types.union_categoricals([a, b], ignore_order=True)
['a', 'b', 'c', 'c', 'b', 'a']
Categories (3, object): ['a', 'b', 'c']

union_categoricals 也可以与 CategoricalIndex 或包含分类数据的 Series 一起使用,但请注意,结果数组始终是一个普通的 Categorical

>>> a = pd.Series(["b", "c"], dtype="category")
>>> b = pd.Series(["a", "b"], dtype="category")
>>> pd.api.types.union_categoricals([a, b])
['b', 'c', 'a', 'b']
Categories (3, object): ['b', 'c', 'a']