如何基于列表值筛选DataFrame行?避免逐个编写判断条件
嘿,这个问题我太懂了!你尝试用in运算符没效果,是因为在pandas里,直接对Series用in会做整体判断(检查整个Series是否是列表的元素),返回的是一个单一的布尔值,而不是逐元素的判断结果,自然没法用来筛选行。
正确的简便方法:使用
isin()方法 Pandas专门提供了isin()方法来处理这种“匹配多个候选值”的筛选场景,完美替代你不想写的多个|条件,代码简洁又易读:
# 假设你的DataFrame是df2 filtered_df = df2[df2['name'].isin(['bil', 'bob'])]
这个方法会遍历name列的每一个元素,检查它是否存在于你传入的列表['bil', 'bob']中,返回一个和原列长度一致的布尔Series——刚好能用它做布尔索引,筛选出所有符合条件的行。
额外小技巧:反向筛选
如果之后需要排除bil和bob的行,只需要在前面加个取反符号~即可:
# 筛选name列不为bil或bob的所有行 filtered_df = df2[~df2['name'].isin(['bil', 'bob'])]
内容的提问来源于stack exchange,提问作者Rilcon42
相关产品推荐
相关产品推荐

