multiple get_dummies columns pandas dataframe one-hot-encoding

pandas - columns - ¿Ejecutando get_dummies en varias columnas de DataFrame?



pandas get_dummies (4)

A menos que no entienda la pregunta, se admite de forma nativa en get_dummies al pasar el argumento de las columnas.

¿Cómo se puede ejecutar de forma idiomática una función como get_dummies , que espera una sola columna y devuelve varias, en varias columnas de DataFrame?


Alguien puede tener algo más inteligente, pero aquí hay dos enfoques. Suponiendo que tiene un marco de datos llamado df con las columnas ''Nombre'' y ''Año'' para las que desea dummies.

En primer lugar, simplemente iterar sobre las columnas no es tan malo:

In [93]: for column in [''Name'', ''Year'']: ...: dummies = pd.get_dummies(df[column]) ...: df[dummies.columns] = dummies

Otra idea sería utilizar el paquete patsy , que está diseñado para construir matrices de datos a partir de fórmulas de tipo R.

In [94]: patsy.dmatrix('' ~ C(Name) + C(Year)'', df, return_type="dataframe")


Con pandas 0.19 , puedes hacer eso en una sola línea:

pd.get_dummies(data=df, columns=[''A'', ''B''])

Columns especifica dónde se debe realizar la codificación Hot One.

>>> df A B C 0 a c 1 1 b c 2 2 a b 3 >>> pd.get_dummies(data=df, columns=[''A'', ''B'']) C A_a A_b B_b B_c 0 1 1.0 0.0 0.0 1.0 1 2 0.0 1.0 0.0 1.0 2 3 1.0 0.0 1.0 0.0


Desde la versión 0.15.0 de pandas, pd.get_dummies puede manejar un DataFrame directamente (antes de eso, solo podía manejar una sola Serie, y ver a continuación la solución):

In [1]: df = DataFrame({''A'': [''a'', ''b'', ''a''], ''B'': [''c'', ''c'', ''b''], ...: ''C'': [1, 2, 3]}) In [2]: df Out[2]: A B C 0 a c 1 1 b c 2 2 a b 3 In [3]: pd.get_dummies(df) Out[3]: C A_a A_b B_b B_c 0 1 1 0 0 1 1 2 0 1 0 1 2 3 1 0 1 0

Solución para pandas <0.15.0

Puedes hacerlo para cada columna por separado y luego concat los resultados:

In [111]: df Out[111]: A B 0 a x 1 a y 2 b z 3 b x 4 c x 5 a y 6 b y 7 c z In [112]: pd.concat([pd.get_dummies(df[col]) for col in df], axis=1, keys=df.columns) Out[112]: A B a b c x y z 0 1 0 0 1 0 0 1 1 0 0 0 1 0 2 0 1 0 0 0 1 3 0 1 0 1 0 0 4 0 0 1 1 0 0 5 1 0 0 0 1 0 6 0 1 0 0 1 0 7 0 0 1 0 0 1

Si no desea la columna de múltiples índices, elimine las keys=.. de la llamada a la función concat.