如何拆分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列,完全匹配目标格式。
针对问题的解答
- 链式调用方法:通过
with_columns(转换字典为Struct) +unnest(展开子列)的链式调用即可实现,逻辑清晰简洁。 - 字典是否可展开为子列:完全可以,Polars的Struct类型天然支持这种展开操作,是处理键值对列的标准方式。
- 转Pandas是否更简便:不推荐。Polars原生方法无需跨库类型转换,大数据量场景下性能远优于转Pandas后处理;且代码复杂度与Pandas方案持平(Pandas通常需用
pd.json_normalize或低效的apply遍历)。
内容的提问来源于stack exchange,提问作者disguisedtoast
相关产品推荐
相关产品推荐

