Saltar al contenido

Uso de Scikit-Learn OneHotEncoder con un marco de datos de Pandas

Solución:

Resultó que Scikit-Learns LabelBinarizer me dio más suerte al convertir los datos a un formato codificado en caliente, con la ayuda de la solución de Amnie, mi código final es el siguiente

import pandas as pd
from sklearn.preprocessing import LabelBinarizer

jobs_encoder = LabelBinarizer()
jobs_encoder.fit(data['Profession'])
transformed = jobs_encoder.transform(data['Profession'])
ohe_df = pd.DataFrame(transformed)
data = pd.concat([data, ohe_df], axis=1).drop(['Profession'], axis=1)

OneHotEncoder Codifica características enteras categóricas como una matriz numérica one-hot. Es Transformar El método devuelve una matriz dispersa si sparse = True, de lo contrario, una matriz 2-d. No puedes lanzar un Matriz 2-d (o matriz dispersa) en una Serie Pandas. Debe crear una Serie Pandas (una columna en un marco de datos Pandas) para cada categoría.

Recomendaría usar pandas.get_dummies insted:

data = pd.get_dummies(data,prefix=['Profession'], columns = ['Profession'], drop_first=True)

EDITAR:

Usando Sklearn OneHotEncoder:

transformed = jobs_encoder.transform(data['Profession'].to_numpy().reshape(-1, 1))
#Create a Pandas DataFrame of the hot encoded column
ohe_df = pd.DataFrame(transformed, columns=jobs_encoder.get_feature_names())
#concat with original data
data = pd.concat([data, ohe_df], axis=1).drop(['Profession'], axis=1)

Otras opciones: Si está ajustando hiperparámetros con GridSearch, se recomienda usar ColumnTransformer y FeatureUnion con Pipeline o directamente make_column_transformer

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *