¿Alguna forma de obtener asignaciones de un codificador de etiqueta en los pandas de Python?

Estoy convirtiendo cadenas a valores categóricos en mi conjunto de datos utilizando el siguiente fragmento de código.

data['weekday'] = pd.Categorical.from_array(data.weekday).labels 

Por ejemplo,

 index weekday 0 Sunday 1 Sunday 2 Wednesday 3 Monday 4 Monday 5 Thursday 6 Tuesday 

Después de codificar el día de la semana, mi conjunto de datos aparece así:

 index weekday 0 3 1 3 2 6 3 1 4 1 5 4 6 5 

¿Hay alguna manera de saber que el domingo se ha asignado a 3, el miércoles a 6 y así sucesivamente?

La mejor manera de hacerlo es utilizar el codificador de tags de la biblioteca sklearn.

Algo como esto:

 from sklearn import preprocessing le = preprocessing.LabelEncoder() le.fit(["paris", "paris", "tokyo", "amsterdam"]) list(le.classes_) le.transform(["tokyo", "tokyo", "paris"]) list(le.inverse_transform([2, 2, 1])) 

Puedes crear un diccionario adicional con mapeo:

 from sklearn import preprocessing le = preprocessing.LabelEncoder() le.fit(data['name']) le_name_mapping = dict(zip(le.classes_, le.transform(le.classes_))) print(le_name_mapping) {'Tom': 0, 'Nick': 1, 'Kate': 2} 

Una forma sencilla y elegante de hacer lo mismo.

 cat_list = ['Sun', 'Sun', 'Wed', 'Mon', 'Mon'] encoded_data, mapping_index = pd.Series(cat_list).factorize() 

y listo , revisa abajo

 print(encoded_data) print(mapping_index) print(mapping_index.get_loc("Mon")) 

Hay muchas maneras de hacer esto. Puede considerar pd.factorize , pd.factorize , etc. Sin embargo, en este caso específico, tiene dos opciones que se adaptarán mejor a usted:

Siguiendo su propio método, puede agregar las categorías:

 pd.Categorical( df.weekday, [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'] ).labels 

La otra opción es mapear valores directamente usando un dict

 df.weekday.map({ 'Sunday': 0, 'Monday': 1, # ... and so on. You get the idea ... }) 

Primero, haz una serie categórica:

 weekdays = pd.Series(['Sun', 'Sun', 'Wed', 'Mon', 'Mon']).astype('category') 

Luego, inspecciona sus “categorías”:

 weekdays.cat.categories.get_loc('Sun') 

Si tiene ambos tipos de datos numéricos y categóricos en el dataframe que puede usar: aquí X es mi dataframe que tiene tanto variables categóricas como numéricas

 from sklearn import preprocessing le = preprocessing.LabelEncoder() for i in range(0,X.shape[1]): if X.dtypes[i]=='object': X[X.columns[i]] = le.fit_transform(X[X.columns[i]]) 

O puedes probar esto:

 from sklearn.preprocessing import LabelEncoder le = LabelEncoder() data = data.apply(le.fit_transform) 

Nota: esta técnica es buena si no está interesado en volver a convertirlos.