如何过滤NaN(熊猫)?

Ger*_*ard 47 python nan pandas

我有一个pandas数据帧(df),我想做的事情如下:

newdf = df[(df.var1 == 'a') & (df.var2 == NaN)]
Run Code Online (Sandbox Code Playgroud)

我已经尝试用np.NaN,'NaN'或者'nan'等等替换NaN ,但没有任何评估为True.没有pd.NaN.

我可以df.fillna(np.nan)在评估上面的表达式之前使用但是感觉很乱,我想知道它是否会干扰其他依赖能够识别熊猫格式NaN的熊猫操作.

我觉得应该对这个问题有一个简单的答案,但不知怎的,它已经躲过了我.任何建议表示赞赏.谢谢.

Mar*_*eld 54

这不起作用,因为NaN它不等于任何东西,包括NaN.请pd.isnull(df.var2)改用.

  • 感谢您的建议和很好的解释.我看到df.var2.isnull()是这个答案的另一个变种. (4认同)
  • 对于像我一样有@ multigoodverse观察的其他人,我发现还有`pd.notnull()`.所以你可以用'df.loc [pd.isnull(df.var)]`保存`NaN` vals,或用`df.loc [pd.notnull(df.var)]`过滤掉它们. (2认同)
  • 您还可以使用一元运算符 (`~`) 过滤 nan。类似于`df.loc[~pd.isnull(df.var)]` (2认同)

Gil*_*gio 37

最简单的解决方案:

filtered_df = df[df['var2'].isnull()]
Run Code Online (Sandbox Code Playgroud)

这会过滤并为您提供在'var2'列中仅包含NaN值的行.


小智 29

df[df['var'].isna()]
Run Code Online (Sandbox Code Playgroud)

其中“var”是列名称


Nic*_*asM 6

熊猫使用numpy的NaN值.用于numpy.isnan从熊猫系列中获取布尔向量.

  • 你不能使用 numpy.isnan 作为输入 (2认同)