Pandas.dataframe.query() - 获取非空行(Pandas等效于SQL:"IS NOT NULL")

Rtu*_*tut 8 python dataframe pandas

我使用以下代码从pandas dataframe获取带有一些值的行.我需要将此代码转换为pandas.query().

results= rs_gp[rs_gp['Col1'].notnull()]
Run Code Online (Sandbox Code Playgroud)

当我转换为: results= rs_gp.query('Col1!=None')

它给出了错误'None is not defined'.有人可以帮忙吗

谢谢,Rtut

Max*_*axU 10

我们可以使用以下事实NaN != NaN:

In [1]: np.nan == np.nan
Out[1]: False
Run Code Online (Sandbox Code Playgroud)

因此,将列与自身进行比较将仅返回非NaN值:

rs_gp.query('Col1 == Col1')
Run Code Online (Sandbox Code Playgroud)

演示:

In [42]: df = pd.DataFrame({'Col1':['aaa', np.nan, 'bbb', None, '', 'ccc']})

In [43]: df
Out[43]:
   Col1
0   aaa
1   NaN
2   bbb
3  None
4
5   ccc

In [44]: df.query('Col1 == Col1')
Out[44]:
  Col1
0  aaa
2  bbb
4
5  ccc
Run Code Online (Sandbox Code Playgroud)


小智 10

我不知道我的解决方案是否在这个问题的第一个答案之后添加到 pandas 中,但 notnull() 和 isnull() 现在是 pandas 中查询的有效选项。

df.query('Col1.isnull()', engine='python')
Run Code Online (Sandbox Code Playgroud)

这将返回该行单元格中值为空的所有行。

df.query('Col1.notnull()', engine='python')
Run Code Online (Sandbox Code Playgroud)

反之亦然,此查询将返回值不存在的每一行的每一行。

另外:声明引擎并将其设置为 python 将允许您在查询中使用 pandas 函数。