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

使用NumPy进行数据验证时出现TypeError: unsupported operand type(s) for &: 'tuple' and 'tuple'错误的解决咨询

问题分析与解决方法

嘿,我来帮你搞定这个报错问题~

错误原因

你触发的TypeError: unsupported operand type(s) for &: 'tuple' and 'tuple',核心问题出在**np.where()的返回值类型上:
当你只给np.where()传入一个布尔条件时,它返回的是
满足条件的元素的索引元组**(格式是(行索引数组, 列索引数组)),而不是你需要的布尔掩码数组。这时候你用&去连接两个元组,Python根本不知道怎么处理这种操作,自然就报错了。

而且np.select()要求conditions参数是一组布尔数组(每个元素是True/False的数组),用来标记哪些位置要对应values里的值,你传索引元组肯定不符合要求啦。

解决方法

其实完全没必要用np.where(),直接用Pandas自带的布尔比较表达式就能生成符合要求的布尔数组,修正后的代码如下:

conditions = [
    df['DD'].eq('No DD Required'),
    (df['DD'].eq('DD Required')) & (df['On Direct Debit'].eq('No')),
    (df['DD'].eq('DD Required')) & (df['On Direct Debit'].eq('Yes'))
]
values = ['Pass', 'Fail', 'Pass']
df['DDValidation'] = np.select(conditions, values)

这里要注意给每个复合条件加括号,因为&的运算符优先级比eq()高,不加括号会导致逻辑判断出错。

如果实在想用np.where()的话,你需要取出元组里的索引数组部分(不过完全没必要多此一举),写法是np.where(condition)[0],但显然上面的直接用Pandas布尔表达式的写法更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 19:43:09