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
相关产品推荐
相关产品推荐

