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

如何在Polars中将Struct转换为Series?(含cum_fold实操场景)

Polars将Struct列转换为常规Series列的方法

使用pl.cum_fold()后得到一个包含Struct类型列的DataFrame,该DataFrame结构如下:

┌───────────────────────────────────┐
│ price                             │
│ ---                               │
│ struct[2000]                      │
╞═══════════════════════════════════╡
│ {null,null,null,null,30302.67187… │
└───────────────────────────────────┘

希望将该Struct列转换为常规的Series列,目前只能通过转换为Python对象再转回DataFrame的方式实现:

df = pl.DataFrame(pl.Series('price', df[0, 0].values()))

询问是否可以通过Polars表达式或工具方法实现该转换。

可以直接用Polars原生表达式完成转换,无需转成Python对象,以下是两种高效实现方式:

  • 方式一:Struct转列表后展开

    df = df.select(pl.col("price").struct.to_list()).explode("price")
    

    先通过struct.to_list()把Struct的所有字段值转为列表,再用explode()将列表元素拆分为单独行,最终得到常规Series列的DataFrame。

  • 方式二:提取Struct字段后转长格式
    如果需要保留原Struct字段名(若存在),可先提取所有字段再合并为单列:

    df = df.select(pl.col("price").struct.fields()).melt(value_name="price").select("price")
    

    struct.fields()提取Struct的所有字段为独立列,melt将多列合并为单个值列,最后仅保留目标price列即可。

这两种方法完全基于Polars内置操作,性能远优于转Python对象的方式,尤其适合处理大尺寸Struct数据。

内容的提问来源于stack exchange,提问作者Joris Medeišis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:12:38