如何在数据掩码中排除指定分类,解决&运算类型不支持报错
问题解决方法
错误原因
报错的核心是位运算符&两侧的操作数类型不匹配:其中一个返回了整数类型,另一个是Categorical分类类型,无法直接执行与运算。本质是分类类型的TuType和整数1001做不等判断时,没有按预期返回布尔数组。
可行解决方案
你可以任选以下一种方法修改代码:
- 方法1:用兼容性更高的
isin()方法做排除判断,适配分类类型的等值校验
修改后的代码如下:
sns.histplot(data=DS1[(DS1.TuWgt<30000) & (~DS1.TuType.isin([1001]))], x="TuWgt",hue="TuType",multiple="stack")
- 方法2:如果
1001是分类值的字符串形式,给数值加引号即可
sns.histplot(data=DS1[(DS1.TuWgt<30000) & (DS1.TuType!='1001')], x="TuWgt",hue="TuType",multiple="stack")
- 方法3:临时将分类字段转为整数类型再做判断
sns.histplot(data=DS1[(DS1.TuWgt<30000) & (DS1.TuType.astype(int)!=1001)], x="TuWgt",hue="TuType",multiple="stack")
- 方法4:提前拆分筛选逻辑,避免运算符优先级导致的隐式类型错误
# 单独生成布尔掩码 mask = (DS1['TuWgt'] < 30000) & (DS1['TuType'] != 1001) filtered_df = DS1[mask] # 传入筛选后的数据绘图 sns.histplot(data=filtered_df, x="TuWgt",hue="TuType",multiple="stack")
内容的提问来源于stack exchange,提问作者Lautaro
相关产品推荐
相关产品推荐

