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

pandas多条件筛选DataFrame非NaN行结果异常排查

问题场景

假设有如下DataFrame:

import pandas as pd 
import numpy as np

df = pd.DataFrame({'col1':[1,2,3,4,5],
                   'col2':[11,12,np.nan,24,np.nan]})

print(df)

DataFrame内容如下:

col1  col2
0     1  11.0
1     2  12.0
2     3   NaN
3     4  24.0
4     5   NaN

需要同时满足两个条件筛选行:

  • col1列值小于4
  • col2列值为非NaN

运行如下筛选代码后返回结果为空,未得到预期的前两行符合条件的数据:

df1 = df[(df['col1'] < 4 & df['col2'].notna())]
print(df1)

输出为空:

Empty DataFrame
Columns: [col1, col2]
Index: []
问题原因

核心是Python运算符优先级问题:位运算符&的优先级高于比较运算符<,原代码不会先分别计算两个筛选条件再做按位与,而是会先执行4 & df['col2'].notna(),再将计算结果和df['col1']做小于比较,最终得到的布尔序列全为False,自然筛选不出有效数据。

修正方案

给两个独立的判断条件分别加上括号,明确运算顺序,保证先生成两个条件对应的布尔序列,再做按位与运算:

df1 = df[(df['col1'] < 4) & (df['col2'].notna())]
print(df1)

运行后得到预期结果:

col1  col2
0     1  11.0
1     2  12.0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 17:42:13