Pandas中反转布尔序列为何触发KeyError错误?
问题解决:正确拆分含布尔列的DataFrame
错误原因
你用~df['Column B']触发KeyError,核心问题是**df['Column B']的类型不是严格布尔型**(比如存的是0/1整数、字符串型布尔值或存在缺失值)。按位取反~会把布尔值/整数转成负数(比如~True→-2,~False→-1),此时Pandas会把这个负数数组当成列名去查找,自然找不到对应列,就抛出了KeyError。
正确解决方案
这里给你几种合规且无警告的写法:
- 强制转布尔类型后取反
先把Column B转成严格布尔序列,再用~取反做掩码,适用于非标准布尔类型的场景:
df2 = df[df['Column B'].astype(bool)] df3 = df[~df['Column B'].astype(bool)]
- 用Pandas内置
eq()方法替代== False
PEP8 E712警告是因为不推荐直接用== False比较布尔值,对于Pandas Series,eq(False)是官方推荐的等价写法,既符合规范又不会触发警告:
df2 = df[df['Column B']] df3 = df[df['Column B'].eq(False)]
- 纯布尔列且无缺失值的简化写法
如果Column B已经是严格bool类型且无NaN,也可以直接用~操作布尔值本身:
df3 = df[~df['Column B']]
内容的提问来源于stack exchange,提问作者Fidel Lopez
相关产品推荐
相关产品推荐

