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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:40:23