Tableaux croisés

Reconfigurer les données avec pandas

Maria Eugenia Inzaugarat

Data Scientist

Limites de la méthode pivot

another_fifa.head()
                 name    variable  metric_system  imperial_system
0   Cristiano Ronaldo      weight             83           183.00
1            J. Oblak      weight             87           191.00
2   Cristiano Ronaldo      height            187             6.13
3     J. Oblak             height            188             6.16
4   Cristiano Ronaldo      height            187             6.14
another_fifa.pivot(index="name", columns="variable")
Traceback (most recent call last):
   ValueError: Index contains duplicate entries, cannot reshape
Reconfigurer les données avec pandas

Limites de la méthode pivot

  • Pivot générique
  • Chaque paire index/colonne doit être unique
  • Impossible d'agréger des valeurs
Reconfigurer les données avec pandas

Tableau croisé

  • Un DataFrame de statistiques résumant les données d'un DataFrame plus grand

 

Un DataFrame affichant des statistiques récapitulatives

Reconfigurer les données avec pandas

Tableau croisé

Un DataFrame au format long

Reconfigurer les données avec pandas

Tableau croisé

Flèche allant d'un format long à un format large avec statistiques récapitulatives

 

L'appel à pivot_table

Reconfigurer les données avec pandas

Tableau croisé

Un DataFrame long et un récapitulatif avec colonnes et index surlignés

 

Appel à pivot avec arguments index et columns

Reconfigurer les données avec pandas

Tableau croisé

Un DataFrame long et un récapitulatif avec colonne et valeurs surlignées

 

Appel à pivot avec arguments values et fonction d'agrégation

Reconfigurer les données avec pandas

Tableau croisé

another_fifa.pivot_table(index="name", columns="variable", aggfunc="mean")
                     metric_system     imperial_system       
         variable   height  weight     height   weight
             name                                                         
Cristiano Ronaldo      187      83      6.135    183.0
         J. Oblak      188      87      6.160    191.0
Reconfigurer les données avec pandas

Index hiérarchiques

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
Reconfigurer les données avec pandas

Index hiérarchiques

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
fifa_players.pivot_table(index=                 , columns="movement", values=                        , aggfunc=     )
Reconfigurer les données avec pandas

Index hiérarchiques

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
fifa_players.pivot_table(index=["first", "last"], columns="movement", values=                        , aggfunc=     )
Reconfigurer les données avec pandas

Index hiérarchiques

fifa_players.head(6)
      first     last   movement   overall  attacking
0    Lionel    Messi   shooting        92         70
1 Cristiano  Ronaldo   shooting        93         89
2    Lionel    Messi    passing        92         92
3 Cristiano  Ronaldo    passing        82         83
4    Lionel    Messi    passing        96         88
5 Cristiano  Ronaldo    passing        89         84
fifa_players.pivot_table(index=["first", "last"], columns="movement", values=["overall", "attacking"], aggfunc="max")
                           attacking           overall
          movement  passing shooting  passing shooting
    first     last                
Cristiano  Ronaldo       84       89       89       93
   Lionel    Messi       92       70       96       92
Reconfigurer les données avec pandas

Totaux généraux

fifa_players.pivot_table(index=["first", "last"], columns="movement", aggfunc="count",             )
Reconfigurer les données avec pandas

Totaux généraux

fifa_players.pivot_table(index=["first", "last"], columns="movement", aggfunc="count", margins=True)
                                attacking                  overall
          movement  passing shooting  All    passing shooting  All
    First     Last                
Cristiano  Ronaldo        2        1    3          2        1    3
   Lionel    Messi        2        1    3          2        1    3
      All                 4        2    6          4        2    6
Reconfigurer les données avec pandas

Pivot ou tableau croisé ?

 

Le DataFrame contient-il plus d'une valeur par paire index/colonne ?

Avez-vous besoin d'un multi-index dans le DataFrame pivoté ?

Avez-vous besoin de statistiques récapitulatives sur un grand DataFrame ?

Oui ! Utilisez .pivot_table()

Reconfigurer les données avec pandas

Passons à la pratique !

Reconfigurer les données avec pandas

Preparing Video For Download...