Проблема в том, что NaN
не равно NaN
.Строго говоря, отношение равенства числа с плавающей запятой не является отношением эквивалентности , поскольку оно не является полностью рефлексивным .
ДействительноНапример, если мы сравним np.nan
с np.nan
, то получим:
>>> np.nan == np.nan
False
Это главная причина, по которой .isna()
существует в первую очередь.
Если мыНапример, создайте фрейм данных, который состоит только из NaN
s, мы видим, что df.isna()
и df == np.nan
дают разные ответы:
>>> df = pd.DataFrame({'a': [np.nan]*5, 'b': [np.nan]*5})
>>> df
a b
0 NaN NaN
1 NaN NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
>>> df.isna()
a b
0 True True
1 True True
2 True True
3 True True
4 True True
>>> df == np.nan
a b
0 False False
1 False False
2 False False
3 False False
4 False False