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

Polars中展开嵌套列时添加前缀/后缀避免列名重复的方法

解决Polars展开metadata列时的列名重复问题

你遇到的问题根源是:with_columns中用alias("lang")是新增了一列,而非替换原有的language列,所以原language列仍存在,和metadata内的language字段展开后重名,触发DuplicateError。下面是三种可行的解决方案:

方案1:替换原有列名而非新增

直接用rename修改原language列的名称,消除列名冲突:

(
    pl.DataFrame(converted_data)
    .with_columns(
        pl.col("tags").cast(pl.List(pl.String)),
        pl.col("valueNum").cast(pl.Float64)
    )
    .rename({"language": "lang"})  # 替换原列名
    .unnest("metadata")
)

方案2:给metadata内的字段统一加前缀

通过struct.rename_fields给metadata结构体里的所有字段添加前缀,避免和现有列重名:

(
    pl.DataFrame(converted_data)
    .with_columns(
        pl.col("tags").cast(pl.List(pl.String)),
        pl.col("valueNum").cast(pl.Float64),
        # 给metadata内每个字段添加前缀
        pl.col("metadata").struct.rename_fields(lambda name: f"meta_{name}")
    )
    .unnest("metadata")
)

方案3:利用unnest的prefix参数(推荐,Polars 0.19.0+支持)

Polars的unnest方法内置了prefix参数,直接为所有展开的列添加前缀,无需额外处理结构体:

(
    pl.DataFrame(converted_data)
    .with_columns(
        pl.col("tags").cast(pl.List(pl.String)),
        pl.col("valueNum").cast(pl.Float64)
    )
    .unnest("metadata", prefix="meta_")  # 一键添加前缀
)

三种方法各有适用场景:方案1适合仅修改冲突列的需求,方案2支持自定义字段命名规则,方案3是最简洁高效的通用解法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:46:13