我正在尝试使用 scikit-learnLabelEncoder
和 Polars DataFrame 来编码分类列。我正在使用以下代码。
import polars as pl
from sklearn.preprocessing import LabelEncoder
df = pl.DataFrame({
"Color" : ["red","white","blue"]
})
enc = LabelEncoder()
但是,会出现错误。
ValueError: y should be a 1d array, got an array of shape () instead.
接下来,我尝试将该列转换为 NumPy。
df.with_columns(
enc.fit_transform(pl.col("Color").to_numpy())
)
现在,出现了一个不同的错误。
AttributeError: 'Expr' object has no attribute 'to_numpy'
注意。我发现.cast(pl.Categorical).to_physical()
可以使用来获得所需的结果。不过,我更喜欢transform()
在我的测试数据集上使用类似的东西。
df.with_columns(
pl.col("Color").cast(pl.Categorical).to_physical().alias("Color_encoded")
)
对于这种对外部 API 的调用,可以使用采用整个值序列(例如
enc.fit_transform
) 。pl.Expr.map_batches
注意。
enc.set_output("polars")
如果(如本答案中所述)可用于,那就太好了LabelEncoder
。但是,这尚未实现。您已经分享了一种使用 polars 的原生表达式 API 对列进行标签编码的方法。更简洁的方法可以依赖于密集排名,如下所示。
减法仅用于获得最低标签为 0 的输出。