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

Pandas中使用isnull与&运算符过滤多条件的疑问及用法咨询

问题解答

一、为什么两个表达式结果不同?

核心原因是Python中and和&的运算符优先级存在差异:

  • 对于1000.0 > 0 and (pd.notnull(float('nan'))):

    1. and的优先级低于比较运算符>,所以先计算1000.0 > 0,结果为True;
    2. 再计算pd.notnull(float('nan')),由于float('nan')是空值,返回False;
    3. 最后执行True and False,结果为False。
  • 对于1000.0 > 0 & (pd.notnull(float('nan'))):

    1. &(按位与运算符)的优先级高于比较运算符>,所以先计算0 & (pd.notnull(float('nan')));
    2. pd.notnull(float('nan'))返回False,在Python中False等价于整数0,所以0 & 0的结果是0;
    3. 最后计算1000.0 > 0,结果为True。

二、DataFrame过滤的正确写法

在pandas中使用&做条件过滤时,每个独立的条件都必须用括号括起来,避免因运算符优先级导致逻辑错误。

假设a和b是DataFrame的列,正确写法如下:

# 写法1:使用pd.notnull函数
df['output'] = df[(df['a'] > 100) & pd.notnull(df['b'])]

# 写法2:推荐用Series自带的notnull方法,可读性更强
df['output'] = df[(df['a'] > 100) & df['b'].notnull()]

如果a和b是单独的Series变量,写法类似:

df['output'] = df[(a > 100) & pd.notnull(b)]

核心是把a > 100这类比较运算的结果用括号包裹,确保先完成比较,再和非空校验的结果执行按位与操作。

内容的提问来源于stack exchange,提问作者Ishank lakhmani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 23:09:55