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

如何在Polars DataFrame中拆分列表列元素并生成对应新列

解决方案

针对你的Polars DataFrame处理需求,可通过以下步骤将列表内的每个地址字符串拆分后转为多列:

完整代码实现

import polars as pl

# 初始化原始DataFrame
df = pl.DataFrame({
    'combine_address': [
        ["Yes|#456 Lane|Apt#4|ABC|VA|50566", "Yes|#456 Lane|Apt#4|ABC|VA|50566", "No|#456 Lane|Apt#4|ABC|VA|50566"],
        ["No|#8495|APT#94|SWE|WA|43593", "No|#8495|APT#94|SWE|WA|43593", "Yes|#8495|APT#94|SWE|WA|43593"]
    ]
})

# 链式处理:展开列表→拆分字符串→重命名列
result_df = df.with_columns(
    pl.col("combine_address")
    .list.to_struct()
    .unnest()
    .select(
        [
            pl.col(f"field_{i}")
            .str.split("|")
            .list.to_struct()
            .unnest()
            .rename({f"field_{j}": f"addr_{i}_part_{j}" for j in range(6)})
            for i in range(df["combine_address"].list.len().max())
        ]
    )
)

# 查看结果
print(result_df)

代码说明

  1. 展开列表列:通过list.to_struct()将combine_address的列表元素转为结构体,再用unnest()展开为单独的字符串列(如field_0、field_1)。
  2. 拆分并展开子列:对每个展开后的字符串列,用str.split("|")拆分出6个部分,再次转为结构体并展开,同时通过rename()给子列赋予清晰命名(如addr_0_part_0表示第1个列表元素的第1部分)。
  3. 动态适配列表长度:用df["combine_address"].list.len().max()获取列表的最大长度,确保不管列表有3个还是5个元素,都能自动生成对应数量的拆分列(3个元素生成18列,5个元素生成30列)。

输出示例

最终结果会生成18列,部分列数据如下:

addr_0_part_0addr_0_part_1addr_2_part_0addr_2_part_5
Yes#456 LaneNo50566
No#8495Yes43593

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:15:38