Jupyter/Colab中如何筛选不含指定值的行创建DataFrame?
代码失效原因
之前编写的筛选代码未达预期,是Python运算符优先级导致的逻辑错误:位取反运算符~的优先级高于比较运算符==,原代码实际执行逻辑是先对ileads_address列的所有值做按位取反,再判断取反后的值是否等于0,和预期的「筛选值不等于0的行」逻辑完全不符。
可用实现代码
以下几种写法都可以实现筛选ileads_address列值不为0.0的行、存入新DataFrame的需求,可根据自己的场景选择:
- 修正原写法的逻辑:给相等判断整体加括号,保证取反操作作用在判断结果上
# 匹配浮点型0.0值做排除 df5 = df4[~(df4['ileads_address'] == 0.0)]
- 直接使用不等于运算符判断,写法更简洁,不需要处理取反优先级问题
df5 = df4[df4['ileads_address'] != 0.0]
- 用pandas内置的比较方法,同时兼容空值过滤场景:如果列中存在NaN空值,不做额外处理的话空值行默认会被保留,需要排除空值可以用下面的写法
# 同时排除0.0值和空值 df5 = df4[df4['ileads_address'].ne(0.0) & df4['ileads_address'].notna()]
排查提示:如果运行上述代码后筛选结果仍不符合预期,先执行
print(df4['ileads_address'].dtype)查看列的数据类型,如果是字符串类型,需要把判断条件里的数值0.0替换为字符串'0.0'再执行筛选,类型不匹配会导致比较逻辑失效。
内容的提问来源于stack exchange,提问作者jacksojo
相关产品推荐
相关产品推荐

