DataFrame多条件过滤报错:Series真值模糊如何解决?
问题描述
现有如下DataFrame:
id check_id 1 10 1 100 2 10 3 34 4 12 1 101
以及目标列表:
target_list = [10, 101]
尝试用以下代码过滤DataFrame:
df[(df['id']==1) and (df['check_id'].isin(target_list))]
期望得到输出:
id check_id 1 10 1 101
但触发错误:
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
修复方案
错误根源
Python的and运算符只能处理单个布尔值,但df['id']==1和df['check_id'].isin(target_list)返回的都是布尔Series(每行对应一个布尔判断结果)。and无法确定整个Series的"真值",因此抛出错误。
正确写法
使用Pandas支持的**按位与运算符&**代替and,同时给每个条件单独加括号(因为&的优先级高于比较运算符):
df[(df['id'] == 1) & (df['check_id'].isin(target_list))]
执行结果
运行上述代码后,会得到你期望的过滤结果:
id check_id 1 10 1 101
内容的提问来源于stack exchange,提问作者math_guy_shy
相关产品推荐
相关产品推荐

