Сравнение pd.Series и получение необычных результатов, если в серии нет - PullRequest
0 голосов
/ 30 ноября 2018

Мне интересно, почему при сравнении двух одинаковых серий со значением None возвращается значение False:

pd.Series(['x', 'y', None]) == pd.Series(['x', 'y', None])

0     True
1     True
2    False
dtype: bool

Я ожидаю, что все результаты будут истинными.Если я создаю массив из серии и сравниваю, то получаю ожидаемый результат:

pd.Series(['x', 'y', None]).values == pd.Series(['x', 'y', None]).values

array([ True,  True,  True])

Почему две одинаковые серии с None не равны друг другу?Я что-то пропустил?

Я ожидал бы такого поведения с np.nan, потому что np.nan != np.nan;однако None == None

1 Ответ

0 голосов
/ 30 ноября 2018

Это по замыслу :

см. Окно с предупреждениями: http://pandas.pydata.org/pandas-docs/stable/missing_data.html

Это было сделано довольно давно, чтобы сделать поведение пустымпоследовательны в том, что они не сравниваются равными.Это ставит None и np.nan на равную (хотя и не совместимую с python, НО согласную с numpy) основу.

Так что это не ошибка, а скорее следствие соблюдения двух соглашений.

Полагаю, что документация может быть немного улучшена.

Для равенства серий, содержащих нулевые значения, используйте pd.Series.equals:

pd.Series(['x', 'y', None]).equals(pd.Series(['x', 'y', None]))  # True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...