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

Polars中apply返回元组列表触发BindingsError的解决方法咨询

问题解决:Polars应用函数返回元组列表报错

错误原因

Polars无法直接识别[(字符串, 浮点数)]这种元组列表作为列类型,它仅支持原生的Polars数据类型(比如列表、结构体数组等),因此触发BindingsError。

解决方案

方案1:将结果转为结构体数组列

把元组列表转换成Polars支持的结构体数组,通过map_elements指定返回类型实现:

方式一:直接在lambda中构造结构体

import polars as pl

df_polar = df_polar.with_columns(
    pl.col("text").map_elements(
        lambda x: [
            pl.struct({"label": label, "score": score})
            for label, score in zip(classifier(x)["labels"], classifier(x)["scores"])
        ],
        return_dtype=pl.Array(pl.Struct([
            pl.Field("label", pl.Utf8),
            pl.Field("score", pl.Float64)
        ]))
    ).alias("text_scores")
)

方式二:修改text_scores返回字典列表,再转结构体

先调整text_scores函数返回字典格式:

def text_scores(dict_vals):
    return [{"label": label, "score": score} for label, score in zip(dict_vals['labels'], dict_vals['scores'])]

然后在Polars中指定返回类型:

df_polar = df_polar.with_columns(
    pl.col("text").map_elements(
        lambda x: text_scores(classifier(x)),
        return_dtype=pl.Array(pl.Struct([
            pl.Field("label", pl.Utf8),
            pl.Field("score", pl.Float64)
        ]))
    ).alias("text_scores")
)

方案2:展开为多行多列

如果希望每个标签-分数对单独成一行,可以结合explode和unnest:

df_polar = df_polar.with_columns(
    pl.col("text").map_elements(
        lambda x: [{"label": l, "score": s} for l, s in zip(classifier(x)["labels"], classifier(x)["scores"])],
        return_dtype=pl.Array(pl.Struct([("label", pl.Utf8), ("score", pl.Float64)]))
    ).alias("scores")
).explode("scores").unnest("scores")

执行后,原DataFrame的每行会拆分为4行(对应4个标签),同时生成label和score两个独立列。

方案3:拆分标签和分数为独立列表列

直接提取classifier返回字典中的labels和scores作为两个单独的列表列,无需使用text_scores函数:

df_polar = df_polar.with_columns(
    pl.col("text").map_elements(
        lambda x: classifier(x)["labels"],
        return_dtype=pl.List(pl.Utf8)
    ).alias("labels"),
    pl.col("text").map_elements(
        lambda x: classifier(x)["scores"],
        return_dtype=pl.List(pl.Float64)
    ).alias("scores")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 14:17:36