如何在Polars中将DataFrame每行转为对象并新增对应列?
在Polars中新增列存储自定义对象的实现方案
完全可以在Polars DataFrame中新增一列存储自定义Python对象,以下是最优实现方式:
1. 定义自定义对象类
首先实现你需要的PurchasedObject类:
class PurchasedObject: def __init__(self, name, size, color): self.name = name self.size = size self.color = color # 可选:定义repr方便查看对象内容 def __repr__(self): return f"PurchasedObject(Name='{self.name}', Size={self.size}, Color='{self.color}')"
2. 用Polars原生API生成对象列
利用pl.struct打包目标字段,再通过map_elements转换为自定义对象,这是Polars中处理此类需求的高效方式:
import polars as pl # 假设你的原始DataFrame为df df = df.with_columns( # 先将需要的字段打包为struct,再转换为自定义对象 pl.struct(["Name", "Size", "Color"]) .map_elements( lambda row: PurchasedObject(row["Name"], row["Size"], row["Color"]), return_dtype=pl.Object # 指定返回类型为Object类型 ) .alias("Purchased_Object") )
性能优化建议
如果你的数据量较大,存储Python对象会带来一定的性能开销(因为Polars对原生类型的处理效率更高),可以考虑直接用Polars的struct类型存储结构化数据,无需自定义类:
df = df.with_columns( pl.struct(["Name", "Size", "Color"]).alias("Purchased_Struct") )
这种方式完全基于Polars原生类型,支持所有Polars的查询、过滤操作,性能远优于存储Python对象。
内容的提问来源于stack exchange,提问作者Johnas
相关产品推荐
相关产品推荐

