如何对含列表类型列的Polars DataFrame进行筛选?
Polars列表类型列的筛选方法
正确解决方案
针对列表类型的列,你需要使用Polars专门的列表比较逻辑,有两种常用方式:
方法1:使用eq()配合pl.lit()包装目标列表
import polars as pl df = pl.DataFrame({ 'a': [['1', '3'], ['3'], ['1'], ['2']], 'b':[['8'],['6'],['6', '7'],['7']] }) # 筛选a列等于['1']的行 result = df.filter(pl.col('a').eq(pl.lit(['1']))) print(result)
方法2:使用list.equals()专用方法
这是Polars为列表列提供的更直观的相等判断API:
result = df.filter(pl.col('a').list.equals(['1'])) print(result)
两种方法都会得到正确结果:
shape: (1, 2) ┌───────┬───────────┐ │ a ┆ b │ │ --- ┆ --- │ │ list ┆ list │ ╞═══════╪═══════════╡ │ ["1"] ┆ ["6", "7"]│ └───────┴───────────┘
原代码报错原因
你之前用pl.col('a') == ['1']报错,是因为Polars会把右侧的Python列表当成单个元素的广播序列,尝试将列表类型的a列强制转换为单个Utf8字符串类型,这显然不符合类型规则,因此抛出ComputeError。
内容的提问来源于stack exchange,提问作者jss367
相关产品推荐
相关产品推荐

