【发布时间】:2017-01-22 12:40:47
【问题描述】:
假设我在df 中有以下数据框:
a | b | c
------+-------+-------
5 | 2 | 4
NaN | 6 | 8
5 | 9 | 0
3 | 7 | 1
如果我执行df.loc[df['a'] == 5],它会正确返回第一行和第三行,但如果我执行df.loc[df['a'] == np.NaN],它不会返回任何内容。
我认为这更像是一个 python 的东西而不是 pandas 的东西。如果我将np.nan 与任何东西进行比较,即使np.nan == np.nan 也会评估为False,所以问题是,我应该如何测试np.nan?
【问题讨论】:
-
目标稍微复杂一些,但基本上你使用
df['a'].isnull()或pd.isnull(df['a'])进行空值检查。之后选择很容易:df[df['a'].isnull()] -
您可以使用 numpy.isnan() 为您提供与输入数组形状相同的布尔数组
-
一般来说,我会避免在 DataFrames 上使用
np.isnan。它不如具有相同功能的pd.isnull强大。例如,比较当您尝试np.isnan(df['a'])和pd.isnull(df['a'])时发生df = pd.DataFrame({'a': ['x', np.nan, 'y']})时发生的情况。 -
谢谢大家,我同时使用了
ìsnull()和isnan()并得到了我想要的相同结果。为什么您没有将答案发布为答案? -
本教程可能会有所帮助:chartio.com/resources/tutorials/…