J'ai un dataframe avec ce type de données (trop de colonnes):
col1 int64
col2 int64
col3 category
col4 category
col5 category
Les colonnes ressemblent à ceci:
Name: col3, dtype: category
Categories (8, object): [B, C, E, G, H, N, S, W]
Je veux convertir toutes les valeurs des colonnes en nombre entier comme ceci:
[1, 2, 3, 4, 5, 6, 7, 8]
J'ai résolu ceci pour une colonne par ceci:
dataframe['c'] = pandas.Categorical.from_array(dataframe.col3).codes
Maintenant, j'ai deux colonnes dans mon dataframe - ancienne col3
et nouvelle c
et j'ai besoin de supprimer les anciennes colonnes.
C'est une mauvaise pratique. C'est du travail mais dans mon dataframe de nombreuses colonnes et je ne veux pas le faire manuellement.
Comment ça pythonique et juste intelligemment?
df['col2'].cat.categories
par exemple.NaN
-1
cat.codes
peuvent ne PAS être ceux que vous voyez dans la série!Cela fonctionne pour moi:
Production:
la source
Si votre préoccupation était uniquement de créer une colonne supplémentaire et de la supprimer plus tard, utilisez simplement une nouvelle colonne en premier lieu.
Vous avez terminé. Désormais
Categorical.from_array
obsolète, utilisezCategorical
directementSi vous avez également besoin du mappage d'index en étiquette, il existe un moyen encore meilleur pour le même
vérifier ci-dessous
la source
Ici, plusieurs colonnes doivent être converties. Donc, une approche que j'ai utilisée est ..
Cela convertit toutes les colonnes de type chaîne / objet en catégorielles. Applique ensuite les codes à chaque type de catégorie.
la source
Pour convertir des données catégorielles dans la colonne C des données de l'ensemble de données , nous devons procéder comme suit:
la source
Ce que je fais, c'est que je
replace
valorise.Comme ça-
De cette manière, si la
col
colonne a des valeurs catégorielles, elles sont remplacées par les valeurs numériques.la source
@ Quickbeam2k1, voir ci-dessous -
Utiliser sklearn
la source
fit_transform
maintenant à la placetransform_fit
et corrigé la définition de labelencoder. Pourquoi utilisez-vousiloc[:,:]
? c'est inutile. Quelle est la raison derrière l'image? Au cas où vous voudriez me prouver et que @theGtknerd aurait échoué.Pour une certaine colonne, si vous ne vous souciez pas de la commande, utilisez ceci
Si vous vous souciez de la commande, spécifiez-les sous forme de liste et utilisez-la
la source