如何在NaN中进行筛选(pandas)?

140 投票
5 回答
292616 浏览
提问于 2025-04-18 15:26

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

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

我试过用 np.NaN'NaN''nan' 来替换 NaN,但没有一个能返回 True。也没有 pd.NaN 这个东西。

我可以在评估上面的表达式之前用 df.fillna(np.nan) 来填充 NaN,但这样做感觉有点不太正规,我在想这会不会影响到其他依赖于 pandas 格式 NaN 的操作。

我觉得这个问题应该有简单的解决办法,但不知为什么我就是想不起来。

5 个回答

2

你也可以在这里使用 query 方法:

df.query('var2 != var2')

这是有效的,因为 np.nan != np.nan 的结果是对的,也就是说,缺失值和缺失值是不相等的。

10

Pandas使用的是numpy里的NaN值。你可以用numpy.isnan这个函数来从一个pandas系列中获取一个布尔向量。

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

这里的 "var" 是列的名称。

164
filtered_df = df[df['var2'].isna()]

这个代码会筛选出在 'var2' 列中只有 NaN 值的行。

注意:“Series.isnull 是 Series.isna 的别名。

126

这个不行,因为 NaN 是一个特殊的值,它和任何东西都不相等,包括它自己。所以你应该用 pd.isnull(df.var2) 来检查。

撰写回答