2017-10-09 5 views
3

Le titre capture essentiellement mon problème.Comment coder à chaud une grande base de données lorsque plusieurs colonnes contiennent les mêmes valeurs?

J'ai un dataframe et plusieurs colonnes ont des valeurs telles que [0,1] et si je devais y aller et que l'on code à chaud le df, j'aurais plusieurs colonnes avec le même nom.

La solution fastidieuse serait de créer manuellement des colonnes uniques, mais j'ai 58 colonnes qui sont catégoriques, ce qui ne semble pas très efficace.

Je ne sais pas si cela vous sera utile, mais voici le head() de ma base de données.

x2 x3 x4 x5 x6 x7 x8 x9 x10 x11 ... z217 z218 z219 z220 z221 z222 subject phase state output 
0 0 0 1 -300.361218 0.886360 -2.590886 225.001899 0.006204 0.000037 -0.000013 ... 0.005242 0.024971 -1017.620978 -382.850838 -48.275711 -2.040336 A 3 B 0 
1 0 0 1 -297.126090 0.622211 -3.960940 220.179017 0.006167 -0.000014 -0.000003 ... 0.001722 0.023595 91.229094 24.802230 1.783950 0.022620 A 3 C 0 
2 0 0 1 -236.460253 0.423640 -12.656341 139.453445 0.006276 -0.000028 0.000022 ... -0.010894 -0.036318 -188.232347 -17.474861 -1.005571 -0.021628 A 3 B 0 
3 0 0 1 33.411458 2.854415 -1.962432 3.208911 0.009752 -0.000273 -0.000024 ... -0.034184 -0.047734 185.122907 -549.282067 542.193381 -178.049926 A 3 A 0 
4 0 0 1 -118.125214 2.009809 -3.291637 34.874176 0.007598 0.000001 -0.000022 ... 0.001963 0.004084 35.207794 -78.143166 57.084208 -13.700212 A 4 C 0 
+2

[exemple minimal, complet, vérifiable] (http://stackoverflow.com/help/mcve) applique ici. Veuillez fournir un exemple d'entrée de problème (aucune de vos colonnes n'a de valeur 0, 1, 2) et le DF que vous souhaitez voir apparaître. Débarrassez-vous des informations superflues (ou gardez juste quelques colonnes). – Prune

+0

Je vais garder cela à l'esprit, merci – madsthaks

Répondre

1

Vous utilisez probablement déjà pandas.get_dummies? Si ce n'est pas le cas, cette fonction convertit les colonnes catégorielles en plusieurs colonnes d'indicateurs (un codage à chaud).

Il existe un argument 'préfixe' pour cette fonction qui existe spécifiquement pour votre cas. Cela peut être une liste de chaînes (la longueur doit être égale au nombre de colonnes dans la structure de données). Dans votre cas, vous pouvez en faire un dictionnaire dans lequel vous mapperez les noms de colonnes aux préfixes. Donc, quelque chose comme:

pd.get_dummies(df, prefix={'x3': 'x3', 'x4': 'x4'}) 

Cela colonnes supplémentaires comme x3_0, x3_1 ... x4_0, x4_1 ...

+0

C'est exactement ce dont j'ai besoin, merci! – madsthaks

+0

@madsthaks apprécierait si vous pouvez accepter ma réponse – shikhanshu

0

Vous pouvez lire les données et d'abord obtenir une liste de toutes les valeurs uniques de vos variables. Ensuite, vous pouvez placer un objet encodeur chaud (comme le sklearn.preprocessing.CategoricalEncoder) sur votre liste de valeurs uniques.

Cette méthode peut également vous aider dans un cadre de test de train ou lorsque vous lisez vos données en blocs. J'ai créé un module python qui fait tout cela seul. Vous pouvez le trouver dans ce dépôt GitHub - dummyPy

Un court tutoriel sur ce point - How to One Hot Encode Categorical Variables in Python?