pandas多条件筛选使用|运算符报TypeError: 不支持str与bool运算
Pandas 多条件或筛选 TypeError 修正
触发报错的原始代码:
excel_filtered = excel[excel['prowess_compustat_h1b'] == 1] | excel['compustat_h1b'] == 1
报错信息:TypeError: unsupported operand type(s) for |: 'str' and 'bool'
错误根因
- 括号位置错位:原始代码提前在第一个布尔判断处闭合了DataFrame的索引括号,导致
excel[excel['prowess_compustat_h1b'] == 1]返回已完成筛选的DataFrame对象,而非用于行索引的布尔序列,后续拿这个DataFrame对象和后面的布尔判断结果做位或运算,自然触发类型不匹配错误。 - 多条件组合逻辑位置错误:Pandas多条件筛选要求所有布尔判断的组合表达式整体放在DataFrame的索引方括号内部,不能拆分到括号外做运算。
- 自行调试时写出的修正版本依然存在括号不匹配问题,没有将完整的条件组合放入索引括号内。
可正常运行的最终代码
excel_filtered = excel[(excel['prowess_compustat_h1b'] == 1) | (excel['compustat_h1b'] == 1)]
操作注意事项
- 多条件逻辑判断不能使用Python原生的
or/and,需要使用位运算符|(或)、&(与)——因为pandas传入的是批量布尔值序列,而非单个布尔值,原生逻辑运算符无法处理序列对象。 - 每个独立的条件判断必须单独用括号包裹,否则会因运算符优先级问题导致逻辑判断出错。
内容的提问来源于stack exchange,提问作者Arthur Langlois
相关产品推荐
相关产品推荐

