DataFrame添加uses_name列时遇TypeError:str与bool不支持|运算符
解决Pandas中添加
uses_name列时的TypeError问题 这问题大概率是运算符优先级搞的鬼——在Pandas里用|(按位或)组合条件时,要是不给每个布尔判断单独加括号,就会因为优先级顺序错乱触发类型不匹配的报错。
正确实现代码
你只需要把每个相等判断用括号包裹,再用|组合起来就行:
users['uses_name'] = (users['password'] == users['first_name']) | (users['password'] == users['last_name'])
为什么之前会报错?
Pandas里==的优先级比|低,要是不加括号,代码会被Python解析成:
users['password'] == (users['first_name'] | users['password'])
这时候程序会尝试对字符串列first_name和password执行按位或操作,但字符串和布尔值(或字符串之间)根本不支持|运算,自然就抛出了TypeError: unsupported operand type(s) for |: 'str' and 'bool'的错误。
可选优化建议
如果需要忽略大小写匹配(比如密码是小写的hubbard,而姓氏是大写的Hubbard),可以统一转成小写后再判断:
users['uses_name'] = (users['password'].str.lower() == users['first_name'].str.lower()) | (users['password'].str.lower() == users['last_name'].str.lower())
这样就能正确生成你需要的uses_name列,像你提到的第12行那种密码和姓氏匹配的情况,会被正确标记为True。
内容的提问来源于stack exchange,提问作者Dmitriy Kisil
相关产品推荐
相关产品推荐

