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

如何在Polars中从列表内所有结构体中选取字段?

解决方案

可以通过Polars的列表和结构体操作实现动态提取,无需硬编码列表长度,具体代码如下:

import polars as pl

data = {
    "a": [
        [{
            "x": [1, 2, 3],
            "y": [4, 5, 6]
        },
        {
            "x": [2, 3, 4],
            "y": [3, 4, 5]
        }
        ]
    ],
}
df = pl.DataFrame(data)

# 动态提取并生成目标列
result = df.select(
    pl.col("a")
    # 遍历列表中的每个结构体,提取"x"字段
    .list.eval(pl.element().struct.field("x"))
    # 将提取后的列表转为结构体,自动生成x_1、x_2...格式的字段名
    .list.to_struct(names=lambda idx: f"x_{idx+1}")
    # 将结构体拆分为独立列
    .struct.unnest()
)

print(result)

步骤说明

  • list.eval(pl.element().struct.field("x")):对列a中的每个列表元素(结构体),逐一提取x字段,得到一个包含所有目标列表的新列表。
  • list.to_struct(names=lambda idx: f"x_{idx+1}"):将提取后的列表转换为结构体,通过lambda函数根据元素索引动态生成x_1、x_2这类字段名。
  • struct.unnest():将结构体的每个字段拆分为单独的列,得到最终的DataFrame结构。

这个方案完全适配未知长度的列表,无论原列表包含多少个结构体,都会自动生成对应数量的列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 14:41:21