import pandas as pdon a des données qui ressemblent à ceci
df = pd.read_csv("data/stack-simple.csv")
dfon veut produire une table simplifiée qui ressemblerait à ceci; on élimine les lignes qui correspondraient à une valeur nulle
| city | postcode | type | nombre |
|---|---|---|---|
| London | 90000 | t1 | 1 |
| London | 90000 | t2 | 2 |
| London | 90000 | t3 | 3 |
| Paris | 75000 | t2 | 4 |
| Paris | 75000 | t3 | 2 |
| Paris | 75000 | t4 | 3 |
se concentrer sur les colonnes ti¶
# commencez par extraire les colonnes spéciales
columns = ['t1', 't2', 't3', 't4']
df2 = ...stack()¶
attention comme on a un index simple sur les colonnes, le stack() nous produit une Series
# appliquez un simple `stack()` sur la dataframe df2
# regardez le contenu et le type
series = ...on peut nettoyer les 0¶
on peut se passer de cette étape si on a des n/a à la place des 0; mais ici, c’est le moment de nettoyer
# à vous
...passer de l’index à une colonne ‘usuelle’¶
maintenant, que faut-il faire avec la donnée type pour se rapprocher de ce qu’on cherche à produire ?
indice
voyez df.reset_index()
# à vous
df3 = ...nommer¶
# les noms des colonnes dans df3 ne sont vraiment pas terribles
# à vous...recoller¶
à ce stade il ne reste plus qu’à recoller les morceaux
indice
voyez pd.merge() et/ou df.join()
# à vous
df_all = ...nettoyer¶
et enfin, à éliminer les colonnes qui sont de trop
# à vous# pour vérifier le résultat de visu
# df_allpd.melt()¶
Il se trouve qu’on peut arriver à ce même résultat avec une fonction toute faite de pandas qui s’appelle pd.melt()
Mais bon, pour bien comprendre la librairie c’est sans doute mieux de passer par des manipulations de base comme on vient de le faire :)