You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas替换DataFrame分类列值报错:无法添加新类别,如何解决?

Pandas分类列替换值报错处理

问题原因

你的Remarks列是分类(Categorical)类型,该列预设的类别只有Left_only和Right_only。直接把值替换成不在预设列表里的Yesterday、Today,就会触发报错:

Cannot setitem on a Categorical with a new category (Yesterday), set the categories first

你的原始数据:

Remarks
   Left_only
  Right_only
   Left_only
  Right_only

你使用的替换代码:

DF.loc[df['Remarks'] == 'Left_only', 'Remarks'] = 'Yesterday'

解决办法

方法1:先扩展分类类别再替换

先把新值加入到列的允许分类中,再执行替换:

# 添加新的分类允许值
df['Remarks'] = df['Remarks'].cat.add_categories(['Yesterday', 'Today'])
# 替换对应值
df.loc[df['Remarks'] == 'Left_only', 'Remarks'] = 'Yesterday'
df.loc[df['Remarks'] == 'Right_only', 'Remarks'] = 'Today'
# 可选:如果不需要原分类,删除旧类别
df['Remarks'] = df['Remarks'].cat.remove_categories(['Left_only', 'Right_only'])

方法2:转成字符串类型后替换

如果不需要保留分类特性,直接转成普通字符串再替换更省事:

# 将分类列转为字符串类型
df['Remarks'] = df['Remarks'].astype(str)
# 批量替换值
df['Remarks'] = df['Remarks'].replace({'Left_only': 'Yesterday', 'Right_only': 'Today'})

方法3:直接重命名分类映射

一步完成分类的映射替换:

df['Remarks'] = df['Remarks'].cat.rename_categories({
    'Left_only': 'Yesterday',
    'Right_only': 'Today'
})

内容的提问来源于stack exchange,提问作者dig_123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:01:13