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

如何在Pandas DataFrame中同时使用AND与OR过滤?报错求助

解决Pandas DataFrame过滤时的「'Series' objects are mutable, thus they cannot be hashed」错误

首先咱们拆解下你遇到的问题:你写的代码里用了逗号分隔两个条件,这在Pandas的布尔索引逻辑里是错误的——逗号会被解释成尝试用元组作为索引,而Series是可变对象无法被哈希,所以才抛出这个报错。

你的需求是获取满足「(Dependant为空 或 cust2_status为'closed') 且 cust1_status为'active'」的行,这里的核心是逻辑运算符的优先级控制和正确的布尔索引写法,同时要使用Pandas支持的元素级逻辑运算符,而非Python原生的逻辑关键字。

正确的代码写法

filtered_df = data[((data['Dependant'].isnull()) | (data['cust2_status'] == 'closed')) & (data['cust1_status'] == 'active')]

关键细节说明

  • 括号的必要性:因为|(或)的优先级低于&(且),必须把「Dependant为空 或 cust2_status为closed」这部分用括号括起来,确保先计算这个或条件,再和后面的「cust1_status为active」做与运算,完全匹配你的需求逻辑。
  • 用&/|替代and/or:Python原生的and/or是判断整个对象的布尔值,而Pandas需要对DataFrame的每个元素做逐行逻辑判断,所以必须用元素级的&和|运算符。
  • 移除逗号:你原代码里的逗号是错误根源,Pandas的布尔索引只接受单个布尔Series作为筛选条件,所以要把所有条件组合成一个整体的布尔表达式。

如果追求更高的代码可读性,也可以把条件拆分单独定义:

# 拆分条件,更易维护
has_no_dependant = data['Dependant'].isnull()
cust2_closed = data['cust2_status'] == 'closed'
cust1_active = data['cust1_status'] == 'active'

filtered_df = data[(has_no_dependant | cust2_closed) & cust1_active]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:39:19