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

如何通过物理值直接创建Polars Enum类型Series?

Polars Enum类型:直接从物理值构建Series的高效方案

问题核心

需要直接用Enum对应的物理整数创建Polars Series,避免先转字符串再构建的冗余计算,同时解决原代码中Series.to_physical()方法不存在的问题。

1. 正确获取Enum Series的物理值

Polars的Enum类型Series没有to_physical()方法,因为其底层本身就存储为整数,直接用.to_list()或.to_numpy()就能拿到物理值:

import polars as pl

dt = pl.Enum(["0", "1", "2"])
s1 = pl.Series(["0", "0", "2", "1"], dtype=dt)
# 直接获取物理整数列表
physical = s1.to_list()
print(f"{physical=}")  # 输出 physical=[0, 0, 2, 1]

2. 从物理值高效构建Enum Series

Polars没有from_physical()函数,但可以通过整数Series转Enum类型的方式实现,完全跳过字符串转换:

# 先创建整数类型Series,再转换为目标Enum dtype
s2 = pl.Series(physical, dtype=pl.Int32).cast(dt)
# 验证结果一致
assert s1.equals(s2)

原理说明

Polars的Enum类型是基于整数索引编码的:Enum列表中的第N个元素(从0开始计数)对应物理值N。因此直接用整数构建Series后,通过.cast()转换为Enum dtype,和从原始字符串构建的Series完全等价,且避免了字符串解析的额外开销。

修正后的完整代码

import polars as pl

dt = pl.Enum(["0", "1", "2"])
s1 = pl.Series(["0", "0", "2", "1"], dtype=dt)
physical = s1.to_list()
print(f"{physical=}")

# 高效构建Enum Series
s2 = pl.Series(physical, dtype=pl.Int32).cast(dt)
assert s1.equals(s2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 06:16:12