Tengo un marco de datos de pandas con toneladas de columnas categóricas, que planeo usar en el árbol de decisiones con scikit-learn. Necesito convertirlos a valores numéricos (no uno vectores calientes). Puedo hacerlo con LabelEncoder de scikit-learn. El problema es que hay demasiados y no quiero convertirlos manualmente.
Cuál sería una manera fácil de automatizar este proceso.
scikit-learn
pandas
categorical-data
labels
usuario1700890
fuente
fuente

Respuestas:
Si sus columnas categóricas son actualmente caracteres / objetos, puede usar algo como esto para hacer cada una:
Si necesita volver a las categorías, crearía un diccionario para guardar la codificación; algo como:
El uso de mcve de Julien generará:
fuente
objectcolumnas es muy útil.Primero, creemos un mcve para jugar:
Ahora podemos usar pd.get_dummies para codificar las primeras tres columnas.
Tenga en cuenta que estoy usando el
drop_firstparámetro porque losN-1dummies son suficientes para describir completamente lasNposibilidades (por ejemplo: sia_Var2ya_Var3son 0, entonces esa_Var1). Además, estoy especificando específicamente las columnas, pero no tengo que hacerlo, ya que serán columnas con dtypeobjectocategorical(más abajo).En su aplicación específica, deberá proporcionar una lista de columnas que son categóricas, o deberá inferir qué columnas son categóricas.
Mejor de los casos su trama de datos ya tiene estas columnas con una
dtype=categoryy se puede pasarcolumns=df.columns[df.dtypes == 'category']aget_dummies.De lo contrario, sugiero configurar el
dtyperesto de las columnas según corresponda (sugerencia: pd.to_numeric, pd.to_datetime, etc.) y quedará con columnas que tienen unobjecttipo y estas deberían ser sus columnas categóricas.Las columnas del parámetro pd.get_dummies están predeterminadas de la siguiente manera:
fuente
Para convertir tipos de columnas múltiples a la vez, usaría algo como esto:
Luego me uniría a ellos
original df.fuente
df2[df2.columns] = df2[df2.columns].astype('category')hace lo mismo, noapply, nolambda.