如何过滤 NaN(熊猫)?

Posted

技术标签:

【中文标题】如何过滤 NaN(熊猫)?【英文标题】:How to filter in NaN (pandas)? 【发布时间】:2014-09-22 21:08:47 【问题描述】:

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

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

我尝试将 NaN 替换为 np.NaN'NaN''nan' 等,但没有任何结果为 True。没有pd.NaN

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

我觉得这个问题应该有一个简单的答案,但不知何故它让我无法理解。任何建议表示赞赏。谢谢。

【问题讨论】:

NaN 与自身相比返回 false。你试过df.var2 != df.var2吗? @AndrewJohnson 酷! 【参考方案1】:

最简单的解决方案:

filtered_df = df[df['var2'].isnull()]

这会过滤并为您提供在 'var2' 列中只有 NaN 值的行。

【讨论】:

【参考方案2】:

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

【讨论】:

感谢您的建议和很好的解释。我看到 df.var2.isnull() 是这个答案的另一个变体。 虽然这不包括您不想过滤掉 NaN 值的情况。相当于 df.var2 != NaN 对于像我这样有@multigoodverse 观察的其他人,我发现还有pd.notnull()。所以你可以用df.loc[pd.isnull(df.var)] 保留NaN vals 或用df.loc[pd.notnull(df.var)] 过滤掉它们。 您还可以使用一元运算符 (~) 过滤 nan。类似df.loc[~pd.isnull(df.var)]【参考方案3】:

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

【讨论】:

你不能使用 numpy.isnan 作为输入【参考方案4】:
df[df['var'].isna()]

在哪里

df  : The DataFrame
var : The Column Name

【讨论】:

太棒了!分数最低的答案实际上是正确的。事实上,Pandas 有一个 isna() 方法来检查 NaN。

以上是关于如何过滤 NaN(熊猫)?的主要内容,如果未能解决你的问题,请参考以下文章

过滤熊猫数据框列中的字符串/浮点数/整数值

如何按 NAN 值拆分熊猫时间序列

如何合并/组合熊猫中的列?

如何在熊猫中用 NaN 替换浮点值?

如何在熊猫数据框中将单元格设置为 NaN

如何在熊猫中合并两个数据框以替换 nan