
Andrés Felipe Mesa David
PreguntaOneHotEncoder también realiza algo parecido a getdummies. Cuál usar y por qué?

Andrés Felipe Mesa David
@davinci137 Muchas gracias!! Me quedó muy claro.

David Torres Bejarano
@andresmesad Ambas son funciones destinadas a los mismo, tienes mucha razón.
pd.get_dummies es útil para un desarrollo simple, si por ejemplo estas haciendo un análisis exploratorio ya que trasnforma el DataFrame en sí; también responde muy bien ante varaibles nulas (deja todos los valores como 0) cosa que OneHotEncoder no hace.
import pandas as pd import numpy as np df = pd.DataFrame({'A':['a1','a2','a3',np.nan], 'B':['b1','b2','b3','b3']}) print(pd.get_dummies(df))
A_a1 | A_a2 | A_a3 | B_b1 | B_b2 | B_b3 | |
---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 1 | 0 | 0 |
1 | 0 | 1 | 0 | 0 | 1 | 0 |
2 | 0 | 0 | 1 | 0 | 0 | 1 |
3 | 0 | 0 | 0 | 0 | 0 | 1 |
En el caso de OneHotEncoder podrías sustituir las clases nulas pero debes tener cuidado multicolinealidad.
from sklearn.preprocessing import OneHotEncoder ohe_class = OneHotEncoder(handle_unknown='ignore', sparse=False) ohe_class.fit(df.fillna('nan')) ohe_class.transform(df.fillna('nan')) - - - - - - - 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 1 - - - - - - -
Ahora si vas a realizar un modelo te recomiendo siempre usar OneHotEncoder ya que este crea una clase que permite hacer fit nuevos datos conservando las caracterisitcas previas definidas para tu modelo, de forma que se vuelve escalable para nuevos datos en tu modelo. No es tan simple como pd.get_dummies pero funciona mejor en un pipeline de producción.
PDTA: Recuerda siempre borrar una columna extra en tus dummies para evitar multicolinealidad pd.get_dummies(drop_first=True) o (OneHotEncoder(drop='first')). Así mismo los datos nulos es mejor deninirlos como otra categoria por el mismo problema de multicolinealidad.