如何根据条件为Pandas DataFrame列的数值分配指定值并解决报错
报错原因
你代码里将mask的判断条件和替换值放在同一组圆括号内,生成了两个元组,元组之间不支持|逻辑或运算,因此触发TypeError。
正确实现方案
方案1(最简写法,推荐)
直接对判断条件的布尔结果转整数即可,一行代码完成需求,且自动适配无穷大的场景:
df['B'] = (df['B'].abs() > 15).astype(int)
逻辑说明:
- 绝对值大于15的数值(包括正负无穷大)会得到布尔值
True,转int后为1 - 绝对值在[-15,15]区间内的数值得到布尔值
False,转int后为0
方案2(沿用mask+where的写法修正)
如果需要保持你原来的写法思路,调整mask的参数位置即可:
# mask第一个参数传入判断条件,第二个参数传入满足条件时的替换值 df['B'] = df['B'].mask((df['B'] > 15) | (df['B'] < -15), 1) df['B'] = df['B'].where(df['B'] == 1, 0)
内容的提问来源于stack exchange,提问作者Maqui
相关产品推荐
相关产品推荐

