我想创建一个分类列,其中每个类别都有一个描述性名称,以便自我记录。我有一个整数列表,这些整数相当于分类列中的物理值,我想创建分类列,而无需创建要传递给的中间字符串列表pl.Series
。
import polars as pl
dt = pl.Enum(["0", "1", "2"])
s1 = pl.Series(["0", "0", "2", "1"], dtype=dt)
physical = list(s1.to_physical())
print(f"{physical=}")
s2 = pl.Series([str(p) for p in physical], dtype=dt)
assert s1.equals(s2)
# turning physical to strings just to create the series which is stored as ints is a waste of compute power
# how to construct a series from the physical values?
s2 = pl.Series.from_physical(physical, dtype=dt)
assert s1.equals(s3)
这将打印
physical=[0, 0, 2, 1]
然后它会因为Series.to_physical
不存在而出错。是否有这样的函数from_physical
可以让此代码片段运行完成而不会在最终断言上出错?
您可以使用
polars.Expr.cast
物理整数数组来polars.datatypes.Enum
表示枚举分类,如下所示:您可以简单地转换为枚举数据类型。