说我有一个数据框,df
其中的列包含value
一些浮点值和一些NaN
。如何NaN
使用查询语法 获取数据框的一部分?
例如,以下内容不起作用:
df.query( '(value < 10) or (value == NaN)' )
我得到name NaN is not defined
(与相同df.query('value ==NaN')
)
一般来说,有没有办法使用查询numpy的名称,如inf
,nan
,pi
,e
,等?
通常,您可以使用@local_variable_name
,所以类似
>>> pi = np.pi; nan = np.nan
>>> df = pd.DataFrame({"value": [3,4,9,10,11,np.nan,12]})
>>> df.query("(value < 10) and (value > @pi)")
value
1 4
2 9
会起作用,但nan
不等于它本身,所以value == NaN
总是错误的。解决这个问题的一种方法是使用该事实,并value != value
用作isnan
检查。我们有
>>> df.query("(value < 10) or (value == @nan)")
value
0 3
1 4
2 9
但
>>> df.query("(value < 10) or (value != value)")
value
0 3
1 4
2 9
5 NaN