Сравнивая логические значения с NaN в пандах / numpy
Я хочу сделать поэлементную операцию ИЛИ для двух серий пул логических значений.np.nan
с также включены.
Я попробовал три подхода и понял, что выражение "np.nan
или жеFalse
"можно оценитьTrue
, False
, а такжеnp.nan
в зависимости от подхода.
Вот мой пример серии:
series_1 = pd.Series([True, False, np.nan])
series_2 = pd.Series([False, False, False])
Подход № 1С использованием|
оператор панд:
In [5]: series_1 | series_2
Out[5]:
0 True
1 False
2 False
dtype: bool
Подход № 2С использованиемlogical_or
функция от NumPy:
In [6]: np.logical_or(series_1, series_2)
Out[6]:
0 True
1 False
2 NaN
dtype: object
Подход № 3Я определяю векторизованную версиюlogical_or
который должен оцениваться построчно по массивам:
@np.vectorize
def vectorized_or(a, b):
return np.logical_or(a, b)
я используюvectorized_or
на две серии и преобразовать его вывод (который является массивом Numpy) в серии панд:
In [8]: pd.Series(vectorized_or(series_1, series_2))
Out[8]:
0 True
1 False
2 True
dtype: bool
ВопросМне интересно, о причинах этих результатов.
Этот ответ объясняетnp.logical_or
и говоритnp.logical_or(np.nan, False)
это будетTrue
но почему это работает только в векторизации, а не в подходе № 2 И как объяснить результаты подхода № 1?