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

Polars升级至0.19.0后代码报错:ValueError:无法转换'Unknown'为Literal

Polars 0.19.0升级后过滤代码报错的修复方案

问题重现

升级Polars到0.19.0后,原代码执行时抛出错误:

ValueError: could not convert value 'Unknown' as a Literal

原代码片段:

import polars as pl

df = pl.DataFrame(
    {
        "a": [5, 6, 7, 8, 9],
        "b": [5, 6, 7, 8, 9],
        "c": [5, 6, 7, 8, None],})

cols_1 = ["a", "b"]
cols_2 = ["c"]

df = df.filter(pl.all(pl.col(cols_1 + cols_2).is_not_null()))

错误原因

Polars 0.19.0对表达式的类型校验规则做了更新,pl.all()的参数要求更严格,原写法中直接将多列的is_not_null()结果传入pl.all()的方式不再兼容,触发了类型转换错误。

修复方案

有两种可行的修改方式,任选其一即可:

方式1:使用表达式链的.all()方法

将pl.all()替换为表达式末尾的.all(),明确对每行的所有指定列进行非空检查:

df = df.filter(pl.col(cols_1 + cols_2).is_not_null().all())

方式2:使用pl.all_horizontal()函数

用pl.all_horizontal()替代pl.all(),该函数专门用于横向(跨行)的全量条件校验:

df = df.filter(pl.all_horizontal(pl.col(cols_1 + cols_2).is_not_null()))

两种写法都能正确过滤掉包含Null值的行,最终得到的DataFrame会排除最后一行(c列为None的记录)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:03:17