Pandas判断dataframe是否为空时~与not运算符的使用区别
~运算符与not运算符的适用场景说明 二者的核心区别
not是Python原生的逻辑非运算符,仅用于布尔值的逻辑取反,返回结果只能是True或False,是普通布尔判断场景的标准用法。~是Python的按位取反运算符,作用于整数的二进制位,计算规则为~x = -x - 1,仅适用于位运算、或者pandas/numpy的向量化布尔序列取反场景。
异常结果的产生原因
Python的布尔类型是int的子类:True对应的整数值为1,False对应整数值为0。
你测试的df.empty返回值是布尔值True,用~运算时会触发原生的按位取反逻辑,实际是对整数1做取反,计算结果就是-1-1 = -2,自然不会得到你预期的False。而用not df.empty就是标准的布尔取反,得到的False是正确结果。
适用场景总结
- 所有单个布尔值的逻辑判断场景,都应该使用
not运算符,不会出现类型转换导致的异常结果。 - 只有当你操作pandas的Series、numpy的数组这类向量化布尔序列时,才需要用
~做逐元素的逻辑取反,因为这类数据结构重载了~运算符的实现,适配了批量取反的需求。
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

