可为空的布尔数据类型#

备注

布尔数组目前还处于实验阶段。其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 (有时称为三值逻辑)用于如下逻辑运算 & (和), | (或)和 ^ (异或)。

下表显示了每种组合的结果。这些操作是对称的,因此翻转左侧和右侧对结果没有影响。

表达式

结果

True & True

True

True & False

False

True & NA

NA

False & False

False

False & NA

False

NA & NA

NA

True | True

True

True | False

True

True | NA

True

False | False

False

False | NA

NA

NA | NA

NA

True ^ True

False

True ^ False

True

True ^ NA

NA

False ^ False

False

False ^ NA

NA

NA ^ NA

NA

当一个 NA 存在于操作中,则输出值为 NA 仅在不能仅基于其他输入确定结果的情况下。例如, True | NATrue ,因为两者 True | TrueTrue | FalseTrue 。在这种情况下,我们实际上不需要考虑 NA

另一方面, True & NANA 。结果取决于是否 NA 真的是这样 TrueFalse ,因为 True & TrueTrue ,但是 True & FalseFalse ,所以我们不能确定产量。

这不同于如何 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