¿Ejecutando get_dummies en varias columnas de DataFrame?

¿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?

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]: ABC 0 ac 1 1 bc 2 2 ab 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]: AB 0 ax 1 ay 2 bz 3 bx 4 cx 5 ay 6 by 7 cz In [112]: pd.concat([pd.get_dummies(df[col]) for col in df], axis=1, keys=df.columns) Out[112]: AB abcxyz 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.

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 encoding Hot One.

 >>> df ABC 0 ac 1 1 bc 2 2 ab 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 

Alguien puede tener algo más inteligente, pero aquí hay dos enfoques. Suponiendo que tiene un dataframe 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") 

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