Eu tenho um dataframe de pandas com toneladas de colunas categóricas, que planejo usar na árvore de decisão com o scikit-learn. Eu preciso convertê-los em valores numéricos (não um vetores quentes). Eu posso fazer isso com o LabelEncoder do scikit-learn. O problema é que existem muitos deles e não quero convertê-los manualmente.
O que seria uma maneira fácil de automatizar esse processo.
scikit-learn
pandas
categorical-data
labels
user1700890
fonte
fonte
Respostas:
Se suas colunas categóricas são atualmente caráter / objeto, você pode usar algo como isto para fazer cada uma delas:
Se você precisar voltar às categorias, eu criaria um dicionário para salvar a codificação; algo como:
O uso do mcve de Julien produzirá:
fonte
object
colunas é v útil.Primeiro, vamos criar um mcve para brincar:
Agora podemos usar o pd.get_dummies para codificar as três primeiras colunas.
Observe que estou usando o
drop_first
parâmetro porque osN-1
manequins são suficientes para descrever completamente asN
possibilidades (por exemplo: sea_Var2
ea_Var3
sã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 dtypeobject
oucategorical
(mais abaixo).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=category
e você pode passarcolumns=df.columns[df.dtypes == 'category']
paraget_dummies
.Caso contrário, sugiro definir as
dtype
de todas as outras colunas conforme apropriado (dica: pd.to_numeric, pd.to_datetime, etc) e você ficará com colunas que possuem umobject
dtype e essas devem ser suas colunas categóricas.As colunas do parâmetro pd.get_dummies são padronizadas da seguinte maneira:
fonte
Para converter tipos de várias colunas de uma só vez, usaria algo como isto:
Então eu iria me juntar a eles de volta
original df
.fonte
df2[df2.columns] = df2[df2.columns].astype('category')
faz o mesmo, nãoapply
, nãolambda
.