如何过滤NaN(熊猫)?


75

我有一个熊猫数据框(df),我想做些类似的事情:

newdf = df[(df.var1 == 'a') & (df.var2 == NaN)]

我试过用np.NaN,或'NaN''nan'等替换NaN ,但没有任何结果可算作True。没有pd.NaN

df.fillna(np.nan)在评估上述表达式之前,我可以使用它,但是感觉有点黑,我想知道它是否会干扰其他依赖于以后识别熊猫格式NaN的熊猫操作。

我觉得应该对这个问题有一个简单的答案,但是以某种方式它使我难以理解。任何建议表示赞赏。谢谢。


8
NaN与自身相比时返回false。你试过了df.var2 != df.var2吗?
安德鲁·约翰逊

@AndrewJohnson酷!
mrvol

Answers:


82

这不起作用,因为NaN它不等于,包括NaN。使用pd.isnull(df.var2)代替。


4
感谢您的建议和很好的解释。我看到df.var2.isnull()是此答案的另一个变体。
格哈德2014年

1
但是,当您不想过滤掉NaN值时,这并不涵盖这种情况。相当于df.var2!= NaN
multigoodverse

4
对于像我这样的其他人,在@multigoodverse的观察下,我发现还有pd.notnull()。因此,您可以保留NaNvaldf.loc[pd.isnull(df.var)]或使用过滤掉df.loc[pd.notnull(df.var)]
Hendy

2
您也可以使用一元运算符(~)过滤nan 。像df.loc[~pd.isnull(df.var)]
wpercy


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.