pandas 不能添加类别到panda的类别dtype

deyfvvtc  于 2023-03-28  发布在  其他
关注(0)|答案(1)|浏览(106)

我有一个pandas dataframe,其中有一个名为“promo_type”的字段,我使用astype将其转换为分类:

df['promo_type'] = df['promo_type'].astype('category')

稍后在代码中,我想向字段添加另一个类别,如下所示:

df['promo_type'].add_categories('0')

我得到了这个错误:

AttributeError: 'Series' object has no attribute 'add_categories'

我已经检查了我的pandas版本确实有add_categories,并且add_categories是df['promo_type']的可用方法。
我不知道为什么这行不通。
谢谢你的帮助提前。

roejwanj

roejwanj1#

您错过了cat访问器。您必须使用Series.cat.add_categories

df['promo_type'] = df['promo_type'].cat.add_categories('0')

设置:

df = pd.DataFrame({'promo_type': ['a', 'b', 'c']}).astype('category')
print(df['promo_type'])

# Output
0    a
1    b
2    c
Name: promo_type, dtype: category
Categories (3, object): ['a', 'b', 'c']

添加类别:

df['promo_type'] = df['promo_type'].cat.add_categories('0')
print(df['promo_type'])

# Output
0    a
1    b
2    c
Name: promo_type, dtype: category
Categories (4, object): ['a', 'b', 'c', '0']  # <- HERE

更新

只有在使用CategoricalIndex时,才可以在不使用cat访问器的情况下使用add_categories

df = pd.DataFrame({'promo_type': ['a', 'b', 'c']})
catx = pd.CategoricalIndex(df['promo_type'])
print(catx)

# Output
CategoricalIndex(['a', 'b', 'c'], categories=['a', 'b', 'c'], ordered=False, dtype='category', name='promo_type')

修改类别:

catx = catx.add_categories('0')
print(catx)

# Output
CategoricalIndex(['a', 'b', 'c'], categories=['a', 'b', 'c', '0'], ordered=False, dtype='category', name='promo_type')

相关问题