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
object
columnas 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_first
parámetro porque losN-1
dummies son suficientes para describir completamente lasN
posibilidades (por ejemplo: sia_Var2
ya_Var3
son 0, entonces esa_Var1
). Además, estoy especificando específicamente las columnas, pero no tengo que hacerlo, ya que serán columnas con dtypeobject
ocategorical
(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=category
y se puede pasarcolumns=df.columns[df.dtypes == 'category']
aget_dummies
.De lo contrario, sugiero configurar el
dtype
resto de las columnas según corresponda (sugerencia: pd.to_numeric, pd.to_datetime, etc.) y quedará con columnas que tienen unobject
tipo 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
.