如何过滤NaN(pandas)?

问题描述 投票:0回答:5

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

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

我尝试用

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

我可以在评估上述表达式之前使用

df.fillna(np.nan)
,但这感觉很黑客,我想知道它是否会干扰其他依赖于稍后能够识别 pandas 格式 NaN 的 pandas 操作。

我感觉这个问题应该有一个简单的答案,但不知何故它却让我困惑。任何建议表示赞赏。谢谢你。

python pandas nan
5个回答
158
投票

所有解决方案中最简单的:

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

此过滤器会过滤并为您提供在

NaN
列中仅具有
'var2'
值的行。


126
投票

这不起作用,因为

NaN
不等于任何东西,包括
NaN
。请使用
pd.isnull(df.var2)
来代替。


29
投票
df[df['var'].isna()]

其中“var”是列名称


11
投票

Pandas 使用

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


2
投票

您还可以在这里使用

query

df.query('var2 != var2')

此功能自

np.nan != np.nan
起生效。

© www.soinside.com 2019 - 2024. All rights reserved.