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

Python Pandas 如何按条件将分类变量非指定值重命名为other

问题原因分析

你原来的代码存在三个核心错误:

  • 运算符优先级错误:Pandas/Numpy 中|/&等位运算符优先级高于!=/==等比较运算符,不加括号会导致运算顺序完全不符合预期
  • 多值判断逻辑错误:不能直接使用!= 'blue' | 'red'的写法,字符串无法参与位运算,也无法直接实现「既不等于A也不等于B」的判断
  • np.where参数缺失:完整np.where语法为np.where(判断条件, 条件成立时的返回值, 条件不成立时的返回值),原代码仅传入了条件参数,运行会直接报错

另外注意多条件判断时要使用位运算符&表示且、|表示或,不要使用Python原生的and/or,同时每个独立判断条件要加小括号包裹,避免优先级错误;对序列取反要使用Pandas兼容的~符号,不要使用Python原生的not关键字,后者无法作用于Series序列。

正确实现方式

下面给出两种最常用的实现方案:

方案1:使用isin()+np.where实现

isin()方法可以直接判断列值是否在指定列表中,搭配取反符~即可快速实现多值排除,适合分类值较多的场景:

df2['color'] = np.where(~df2['color'].isin(['blue', 'red']), 'other', df2['color'])

方案2:使用loc直接赋值

如果更偏好显式的赋值逻辑,可以用loc定位到符合条件的行直接修改,可读性更高:

df2.loc[~df2['color'].isin(['blue', 'red']), 'color'] = 'other'

如果判断的分类值数量较少,也可以用多条件写法替代isin(),注意所有比较条件都要加小括号包裹:

# 等效写法,分类值多的时候不如isin简洁
df2['color'] = np.where((df2['color'] != 'blue') & (df2['color'] != 'red'), 'other', df2['color'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:03