可为空布尔数据类型# 笔记 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实现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当操作中存在an 时,NA仅当结果不能仅根据其他输入确定时才会输出值。例如, 是,因为和 都是。在这种情况下,我们实际上不需要考虑 的值。True | NATrueTrue | TrueTrue | FalseTrueNA 另一方面,是。结果取决于是否确实是或,因为是,但是是,所以我们无法确定输出。True & NANANATrueFalseTrue & TrueTrueTrue & 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