如何使用Polars按值列表过滤DataFrame?
Polars按值列表过滤DataFrame的正确方法
你遇到的报错核心原因是误用了Python原生的in运算符——Polars的表达式(Expr)对象不支持用in来判断是否在列表中,必须使用Polars内置的is_in()方法。
正确写法示例
- 单个条件过滤:
.filter(pl.col("cid1").is_in(my_list)) - 多个条件同时满足(用
&连接,注意每个表达式加括号):.filter((pl.col("cid1").is_in(my_list)) & (pl.col("cid2").is_in(my_list)))
完整可运行代码
import polars as pl my_list = [1, 2, 4, 6, 48] # 懒加载模式 df = ( pl.read_csv("bm.dat", separator=';', new_columns=["cid1", "cid2", "cid3"]) .lazy() .filter((pl.col("cid1").is_in(my_list)) & (pl.col("cid2").is_in(my_list))) .collect() ) # 非懒加载模式(去掉lazy和collect) df = ( pl.read_csv("bm.dat", separator=';', new_columns=["cid1", "cid2", "cid3"]) .filter((pl.col("cid1").is_in(my_list)) & (pl.col("cid2").is_in(my_list))) )
is_in()是Polars专门用来判断列值是否存在于指定可迭代对象(列表、集合等)中的表达式方法,懒加载和非懒加载模式都能正常使用。
内容的提问来源于stack exchange,提问作者Jahspear
相关产品推荐
相关产品推荐

