可为空的布尔数据类型#
备注
布尔数组目前还处于实验阶段。其API或实现可能会在没有警告的情况下发生更改。
1.0.0 新版功能.
使用NA值进行索引#
Pandas允许用索引 NA
值,这些值被视为 False
。
在 1.0.2 版更改.
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
Kleene逻辑运算#
arrays.BooleanArray
机具 Kleene Logic (有时称为三值逻辑)用于如下逻辑运算 &
(和), |
(或)和 ^
(异或)。
下表显示了每种组合的结果。这些操作是对称的,因此翻转左侧和右侧对结果没有影响。
表达式 |
结果 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
当一个 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 <NA>
dtype: boolean