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

将Polars DataFrame中的数组列拆分为常规列

将Polars DataFrame中的数组列拆分为常规列

嘿,我来帮你搞定这个问题!要把Polars DataFrame里的数组列拆成带自定义表头的常规列,其实有两种简单又实用的方法,我给你一步步演示:

方法1:转结构体后展开

这种方法先把数组列转换成结构体,给每个元素指定对应的字段名,再把结构体拆成单独的列,逻辑非常直观:

import polars as pl

df = pl.DataFrame(
    {
        "first_last": [
            ["Anne", "Adams"],
            ["Brandon", "Branson"],
            ["Camila", "Campbell"],
            ["Dennis", "Doyle"],
        ],
    }
)

# 把数组列转成带指定字段的结构体,再展开成独立列
result_df = df.with_columns(
    pl.col("first_last").list.to_struct(fields=["first_name", "last_name"])
).unnest("first_last")

print(result_df)

运行后会得到这样的结果:

shape: (4, 2)
┌────────────┬───────────┐
│ first_name ┆ last_name │
│ ---        ┆ ---       │
│ str        ┆ str       │
╞════════════╪═══════════╡
│ Anne       ┆ Adams     │
│ Brandon    ┆ Branson   │
│ Camila     ┆ Campbell  │
│ Dennis     ┆ Doyle     │
└────────────┴───────────┘

方法2:直接提取数组元素并命名列

如果你的数组长度是固定的(比如例子里每个数组都有2个元素),也可以直接提取每个位置的元素,同时给新列命名,操作更简洁:

# 提取数组第0位和第1位元素,分别命名为first_name和last_name,最后删掉原数组列
result_df = df.with_columns(
    first_name=pl.col("first_last").list.get(0),
    last_name=pl.col("first_last").list.get(1)
).drop("first_last")

print(result_df)

这个方法得到的结果和上面完全一致,而且代码更直白,适合你明确知道每个数组元素对应什么字段的场景。

要是你遇到数组长度不固定的情况,可以先通过list.length()检查长度,或者用list.to_struct()时设置fill_null参数来处理缺失值,但你的例子里都是固定长度的,这两种方法都能完美解决问题~

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:17:58