Pandas整数Series真值判断异常:为何仅奇数行被筛选?
问题分析:Pandas Series按位与操作导致的筛选结果困惑
- 代码拼写修正:你写的
pd.DataFrame(tdata)里的tdata应为data,否则会触发NameError,推测是输入时的笔误。 - 核心原因:你误用了按位与运算符
&而非逻辑与运算。在Python中True等价于整数1,所以df['calories'] & True本质是对每个calories值执行二进制按位与1的操作:- 偶数的二进制最后一位是0,和1按位与结果为0(Pandas将0视为False)
- 奇数的二进制最后一位是1,和1按位与结果为1(Pandas将非0值视为True)
最终筛选出的是calories为奇数的行,也就是235对应的那一行,这和你看到的结果一致。
- 实现“非零值视为真”的正确写法:
- 直接利用Pandas布尔索引特性(非零数值自动判定为True):
print(df[df['calories']]) - 显式转换为布尔类型:
print(df[df['calories'].astype(bool)])
calories非零的行(你的数据里没有0,所以会返回全部5行)。 - 直接利用Pandas布尔索引特性(非零数值自动判定为True):
内容的提问来源于stack exchange,提问作者vsocrates
相关产品推荐
相关产品推荐

