Я обнаружил, что это корень сбивающей меня с толку проблемы. Панды 1.05

>>> left = pd.Series(pd.Categorical([numpy.nan, numpy.nan, numpy.nan, numpy.nan], categories=["1"], ordered=False))
>>> right = pd.Series(pd.Categorical(["1", "1", "1", numpy.nan], categories=["1"], ordered=False))

>>> left == right 
0    False
1    False
2    False
3    False
dtype: bool

>>> left != right
0    False
1    False
2    False
3    False
dtype: bool

Почему так происходит?

0
DNS_Jeezus 11 Фев 2021 в 02:16

1 ответ

Лучший ответ

Это одно из основных свойств NaN, как определено в стандарте ISO.

Значение NaN не выполняется (returns False) любая операция сравнения.

numpy.nan == numpy.nan

Равно False. Опять же, это требуется по стандарту. Идея состоит в том, что если что-то не является числом , то вы не можете сравнивать его ни с чем, являющимся числом. Это обычно TypeError, но NaN был разработан специально для того, чтобы иметь нечисловое значение, которое, тем не менее, частично совместимо с остальной частью набора числовых данных. Семейство Inf также определено в этом стандарте.

До того, как появились некоторые из этих изящных пакетов, я быстро проверил NaN в коде моделирования: if not(x == x) ...

2
Prune 10 Фев 2021 в 23:27