如何过滤 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(熊猫)?的主要内容,如果未能解决你的问题,请参考以下文章