考虑df
df = pd.DataFrame(dict(A=[-1, 0, 1, np.nan, 2, np.nan, 3, 4]))
我可以像这样放弃NA
df.dropna()
但我如何在query
方法
df.query('A is not null')
不起作用......有什么用?
答案 0 :(得分:2)
DataFrame.query
方法基于pandas.eval
解释器。那里没有定义null
。同样地,None
和is
都不是。但是,您可以使用这种hackish方法:
df.query('A < inf')
幸运的是,名称inf
已定义,与之比较仅返回数字。
答案 1 :(得分:2)
In [22]: df.query("A == A")
Out[22]:
A
0 -1.0
1 0.0
2 1.0
4 2.0
6 3.0
7 4.0
(最初的想法#1是使用df.query("A.notnull()")
,但这只有效,因为numexpr
未安装在该环境中,这限制了query
在该环境中的实用性第一名。)
答案 2 :(得分:1)
您可以使用外部合并和过滤器从DF中删除从查询中获取的元素:
import pandas as pd
df = pd.DataFrame(dict(A=[-1, 0, 1, np.nan, 2, np.nan, 3, 4]))
not_null_df = df[df.A.notnull()]
new_df = df.merge(not_null_df, how='outer', indicator=True)
new_df = new_df[new_df._merge == 'both']
del new_df['_merge']