Estou tentando usar o scikit-learn LabelEncoder
com um Polars DataFrame para codificar uma coluna categórica. Estou usando o seguinte código.
import polars as pl
from sklearn.preprocessing import LabelEncoder
df = pl.DataFrame({
"Color" : ["red","white","blue"]
})
enc = LabelEncoder()
Entretanto, um erro é gerado.
ValueError: y should be a 1d array, got an array of shape () instead.
Em seguida, tentei converter a coluna em um NumPy.
df.with_columns(
enc.fit_transform(pl.col("Color").to_numpy())
)
Agora, um erro diferente é gerado.
AttributeError: 'Expr' object has no attribute 'to_numpy'
Nota. Descobri que isso .cast(pl.Categorical).to_physical()
poderia ser usado para obter o resultado desejado. Ainda assim, eu preferiria usar algo como transform()
no meu conjunto de dados de teste.
df.with_columns(
pl.col("Color").cast(pl.Categorical).to_physical().alias("Color_encoded")
)
Para tal chamada a uma API externa, seria possível usar uma sequência inteira de valores
enc.fit_transform
, como .pl.Expr.map_batches
Nota. Seria bom se
enc.set_output("polars")
(conforme descrito nesta resposta ) estivesse disponível para oLabelEncoder
. No entanto, isso não está implementado.Você já compartilhou uma abordagem para codificação de rótulos de uma coluna usando a API de expressão nativa do polars. Uma maneira mais limpa poderia depender de uma classificação densa, como segue.
A subtração é usada somente para obter uma saída cujo rótulo mais baixo é 0.