Обнуляемый логический тип данных#
Примечание
BooleanArray в настоящее время является экспериментальным. Его API или реализация могут изменяться без предупреждения.
Индексирование с NA значениями#
pandas позволяет индексировать с NA значения в булевом массиве, которые рассматриваются как False.
In [1]: s = pd.Series([1, 2, 3])
In [2]: mask = pd.array([True, False, pd.NA], dtype="boolean")
In [3]: s[mask]
Out[3]:
0 1
dtype: int64
Если вы предпочитаете сохранить NA значения вы можете вручную заполнить их с помощью fillna(True).
In [4]: s[mask.fillna(True)]
Out[4]:
0 1
2 3
dtype: int64
Клини логические операции#
arrays.BooleanArray реализует Логика Клини (иногда называемая трёхзначной логикой) для логических операций, таких как & (и), | (или) и ^ (исключающее ИЛИ).
Эта таблица демонстрирует результаты для каждой комбинации. Эти операции симметричны, поэтому перестановка левой и правой сторон не влияет на результат.
Выражение |
Результат |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Когда NA присутствует в операции, выходное значение NA только если
результат не может быть определен исключительно на основе других входных данных. Например,
True | NA является True, потому что оба True | True и True | False
являются True. В этом случае нам фактически не нужно учитывать значение NA.
С другой стороны, True & NA является NA. Результат зависит от того,
является ли NA действительно является True или False, поскольку True & True является True,
но True & False является False, поэтому мы не можем определить вывод.
Это отличается от того, как np.nan ведёт себя в логических операциях. pandas обрабатывал
np.nan является всегда false в выводе.
В or
In [5]: pd.Series([True, False, np.nan], dtype="object") | True
Out[5]:
0 True
1 True
2 False
dtype: bool
In [6]: pd.Series([True, False, np.nan], dtype="boolean") | True
Out[6]:
0 True
1 True
2 True
dtype: boolean
В and
In [7]: pd.Series([True, False, np.nan], dtype="object") & True
Out[7]:
0 True
1 False
2 False
dtype: bool
In [8]: pd.Series([True, False, np.nan], dtype="boolean") & True
Out[8]:
0 True
1 False
2
dtype: boolean