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

如何在Polars中展开包含结构体列表的DataFrame列?

解决方案

你可以通过先拆分列表行,再展开结构体字段的两步操作完成转换,具体代码如下:

import polars as pl

# 原始DataFrame
df = pl.DataFrame(
    {
        "id": [1, 2, 3],
        "s": [
            [{"a": 1, "b": 1}, {"a": 2, "b": 2}, {"a": 3, "b": 3}],
            [{"a": 10, "b": 10}, {"a": 20, "b": 20}, {"a": 30, "b": 30}, {"a": 40, "b": 40}],
            [{"a": 100, "b": 100}, {"a": 200, "b": 200}, {"a": 300, "b": 300}, {"a": 400, "b": 400}, {"a": 500, "b": 500}],
        ],
    }
)

# 执行转换
result_df = df.explode("s").unnest("s")

print(result_df)

操作说明

  • explode("s"):将s列中的每个列表元素拆分为独立行,此时每行的s字段为单个结构体类型
  • unnest("s"):将结构体类型的s字段展开为a、b两个独立列,同时保留id列与各行的对应关系

执行后得到的结果与你期望的长格式DataFrame完全一致:

shape: (12, 3)
┌─────┬─────┬─────┐
│ id  ┆ a   ┆ b   │
│ --- ┆ --- ┆ --- │
│ i64 ┆ i64 ┆ i64 │
╞═════╪═════╪═════╡
│ 1   ┆ 1   ┆ 1   │
│ 1   ┆ 2   ┆ 2   │
│ 1   ┆ 3   ┆ 3   │
│ 2   ┆ 10  ┆ 10  │
│ 2   ┆ 20  ┆ 20  │
│ …   ┆ …   ┆ …   │
│ 3   ┆ 300 ┆ 300 │
│ 3   ┆ 400 ┆ 400 │
│ 3   ┆ 500 ┆ 500 │
└─────┴─────┴─────┘

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 12:09:51