Tengo un marco de datos con este tipo de datos (demasiadas columnas):
col1 int64
col2 int64
col3 category
col4 category
col5 category
Las columnas se parecen a esto:
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
Quiero convertir todo el valor en columnas a un número entero como este:
[1, 2, 3, 4, 5, 6, 7, 8]
Resolví esto para una columna por esto:
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
Ahora tengo dos columnas en mi marco de datos: antiguo col3
y nuevo, c
y necesito eliminar columnas antiguas.
Esa es una mala práctica. Es un trabajo, pero en mi marco de datos hay muchas columnas y no quiero hacerlo manualmente.
¿Cómo hacer esto pitónico y simplemente inteligentemente?
df['col2'].cat.categories
por ejemplo.NaN
exclusivamente a-1
cat.codes
pueden NO ser los que ve en la Serie!Esto funciona para mi:
Salida:
fuente
Si solo le preocupaba hacer una columna adicional y eliminarla más tarde, simplemente no use una nueva columna en primer lugar.
Estás listo. Ahora que
Categorical.from_array
está en desuso, useCategorical
directamenteSi también necesita el mapeo desde el índice a la etiqueta, hay una forma aún mejor para el mismo
ver abajo
fuente
Aquí es necesario convertir varias columnas. Entonces, un enfoque que utilicé es ...
Esto convierte todas las columnas de tipo cadena / objeto en categóricas. Luego aplica códigos a cada tipo de categoría.
fuente
Para convertir datos categóricos en la columna C de los datos del conjunto de datos , debemos hacer lo siguiente:
fuente
Lo que hago es, lo
replace
valoro.Me gusta esto-
De esta manera, si la
col
columna tiene valores categóricos, se reemplazan por los valores numéricos.fuente
@ Quickbeam2k1, ver más abajo -
Usando sklearn
fuente
fit_transform
ahora en lugar detransform_fit
y ha corregido la definición de labelencoder. ¿Por qué lo usasiloc[:,:]
? esto es inútil. ¿Cuál es el motivo de la imagen? En caso de que quisieras probarme a mí y a @theGtknerd, fallaste.Para una determinada columna, si no le importa el orden, use este
Si le importa el pedido, especifíquelos como una lista y use este
fuente