Primeiro, vamos criar um mcve para brincar:
import pandas as pd
import numpy as np
In [1]: categorical_array = np.random.choice(['Var1','Var2','Var3'],
size=(5,3), p=[0.25,0.5,0.25])
df = pd.DataFrame(categorical_array,
columns=map(lambda x:chr(97+x), range(categorical_array.shape[1])))
# Add another column that isn't categorical but float
df['d'] = np.random.rand(len(df))
print(df)
Out[1]:
a b c d
0 Var3 Var3 Var3 0.953153
1 Var1 Var2 Var1 0.924896
2 Var2 Var2 Var2 0.273205
3 Var2 Var1 Var3 0.459676
4 Var2 Var1 Var1 0.114358
Agora podemos usar o pd.get_dummies para codificar as três primeiras colunas.
Observe que estou usando o drop_firstparâmetro porque os N-1manequins são suficientes para descrever completamente as Npossibilidades (por exemplo: se a_Var2e a_Var3são 0, então é a_Var1). Além disso, estou especificando especificamente as colunas, mas não preciso, pois serão colunas com o tipo dtype objectou categorical(mais abaixo).
In [2]: df_encoded = pd.get_dummies(df, columns=['a','b', 'c'], drop_first=True)
print(df_encoded]
Out[2]:
d a_Var2 a_Var3 b_Var2 b_Var3 c_Var2 c_Var3
0 0.953153 0 1 0 1 0 1
1 0.924896 0 0 1 0 0 0
2 0.273205 1 0 1 0 1 0
3 0.459676 1 0 0 0 0 1
4 0.114358 1 0 0 0 0 0
Em seu aplicativo específico, você precisará fornecer uma lista de colunas que são categóricas ou inferir quais colunas são categóricas.
Na melhor das hipóteses, seu quadro de dados já possui essas colunas com dtype=categorye você pode passar columns=df.columns[df.dtypes == 'category']para get_dummies.
Caso contrário, sugiro definir as dtypede todas as outras colunas conforme apropriado (dica: pd.to_numeric, pd.to_datetime, etc) e você ficará com colunas que possuem um objectdtype e essas devem ser suas colunas categóricas.
As colunas do parâmetro pd.get_dummies são padronizadas da seguinte maneira:
columns : list-like, default None
Column names in the DataFrame to be encoded.
If `columns` is None then all the columns with
`object` or `category` dtype will be converted.