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

如何拆分Polars含字典的列生成子列?是否转Pandas更简便?

Polars DataFrame 字典列展开为子列的实现方案

核心结论

Polars原生支持将字典(Struct类型)列展开为子列,无需转Pandas,代码简洁且性能更优。


实现步骤与代码示例

假设你的DataFrame中Price和Duration列存储的是Polars Struct类型(这是Polars处理键值对的原生推荐格式),直接使用unnest方法即可完成展开:

import polars as pl

# 假设原始DataFrame为df
result_df = df.unnest(["Price", "Duration"])

如果列中存储的是Python原生字典对象,需要先将字典转换为Polars Struct类型,再执行展开:

result_df = (
    df
    .with_columns(
        # 将Python字典转为Struct类型
        pl.col("Price").struct.from_dict(),
        pl.col("Duration").struct.from_dict()
    )
    # 展开Struct为子列
    .unnest(["Price", "Duration"])
)

执行后,原Price列的idxmax和max会被展开为Price_idxmax、Price_max列,Duration列对应展开为Duration_idxmax、Duration_max列,完全匹配目标格式。


针对问题的解答

  1. 链式调用方法:通过with_columns(转换字典为Struct) + unnest(展开子列)的链式调用即可实现,逻辑清晰简洁。
  2. 字典是否可展开为子列:完全可以,Polars的Struct类型天然支持这种展开操作,是处理键值对列的标准方式。
  3. 转Pandas是否更简便:不推荐。Polars原生方法无需跨库类型转换,大数据量场景下性能远优于转Pandas后处理;且代码复杂度与Pandas方案持平(Pandas通常需用pd.json_normalize或低效的apply遍历)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 08:02:47