Eu tenho um dataframe com este tipo de dados (muitas colunas):
col1 int64
col2 int64
col3 category
col4 category
col5 category
As colunas parecem assim:
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
Eu quero converter todos os valores em colunas para inteiros assim:
[1, 2, 3, 4, 5, 6, 7, 8]
Resolvi isso para uma coluna com o seguinte:
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
Agora tenho duas colunas em meu dataframe - antigo col3
e novo c
e preciso descartar colunas antigas.
Essa é uma prática ruim. É trabalho, mas no meu dataframe muitas colunas e eu não quero fazer isso manualmente.
Como fazer isso pythônico e apenas inteligente?
df['col2'].cat.categories
por exemplo.NaN
-1
cat.codes
NÃO podem ser os que você vê na Série!Isso funciona para mim:
Resultado:
fonte
Se sua preocupação era apenas fazer uma coluna extra e excluí-la mais tarde, apenas não use uma nova coluna em primeiro lugar.
Você terminou. Agora, como
Categorical.from_array
está obsoleto, useCategorical
diretamenteSe você também precisa do mapeamento de volta do índice para o rótulo, há uma maneira ainda melhor para o mesmo
verifique abaixo
fonte
Aqui, várias colunas precisam ser convertidas. Então, uma abordagem que usei é ...
Isso converte todas as colunas de tipo de string / objeto em categóricas. Em seguida, aplica códigos a cada tipo de categoria.
fonte
Para converter dados categóricos na coluna C dos dados do conjunto de dados , precisamos fazer o seguinte:
fonte
@ Quickbeam2k1, veja abaixo -
Usando sklearn
fonte
fit_transform
agora em vez detransform_fit
e corrigiu a definição do codificador de rótulos. Por que você usailoc[:,:]
? isso é inútil. Qual é a razão por trás da imagem? No caso de você querer me provar e @theGtknerd errado, você falhou.O que eu faço é, eu
replace
valorizo.Como isso-
Dessa forma, se a
col
coluna tiver valores categóricos, eles serão substituídos pelos valores numéricos.fonte
Para uma determinada coluna, se você não se importa com a ordem, use este
Se você se preocupa com a ordem, especifique-os como uma lista e use este
fonte