You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Polars中正确组合多条件过滤?

解决Pokémon数据集过滤条件的正确姿势

问题关键

你要排除的是同时符合Type 1 = Dragon且Total = 600的那一行,核心是搞对逻辑条件的优先级和取反范围。

为啥之前出错

  1. 第一个错误(TypeError):
    &的优先级比!=高,代码会先算"Dragon" & pl.col("Total")——这相当于把字符串和Polars表达式硬凑一起做按位运算,肯定会报错。必须给每个独立条件套括号,明确先判断每个条件,再做逻辑运算。

  2. 第二个错误(误删太多行):
    用.ne()时如果写成pl.col("Type 1").ne("Dragon") & pl.col("Total").ne(600),逻辑变成了“Type1不是Dragon 而且 Total不是600”——这会把所有Dragon类型的行(不管Total是不是600)、所有Total=600的行(不管Type1是不是Dragon)都删掉,完全不是你要的效果。

正确写法

有两种等价的正确方式,随便选哪种:

方式1:直接排除联合条件

把“同时满足两个条件”的情况用括号包起来,再取反(~表示逻辑非):

df.filter(~((pl.col("Type 1") == "Dragon") & (pl.col("Total") == 600)))

这里每个条件都套括号,可读性拉满,不容易出错。

方式2:用逻辑转换(德摩根定律)

根据逻辑规则,不是(A且B)等价于不是A 或者 不是B,所以也能这么写:

df.filter((pl.col("Type 1") != "Dragon") | (pl.col("Total") != 600))

同样要给每个条件加括号,避免优先级坑。

效果验证

这两种写法都会精准删掉那一行同时符合两个条件的数据,其他行全保留,正好符合你的需求。

内容的提问来源于stack exchange,提问作者bbgatch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 06:55:03