如何在NaN中进行筛选(pandas)?
我有一个 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
10
Pandas使用的是numpy
里的NaN值。你可以用numpy.isnan
这个函数来从一个pandas系列中获取一个布尔向量。
29
df[df['var'].isna()]
这里的 "var" 是列的名称。
164
filtered_df = df[df['var2'].isna()]
这个代码会筛选出在 'var2'
列中只有 NaN
值的行。
126
这个不行,因为 NaN
是一个特殊的值,它和任何东西都不相等,包括它自己。所以你应该用 pd.isnull(df.var2)
来检查。