Formate de date: wide și long

Restructurarea datelor cu pandas

Maria Eugenia Inzaugarat

Data Scientist

Veți învăța

  • Formatele wide și long
  • Transformare din long în wide
  • Transformare din wide în long
  • Stivuirea și destivuirea coloanelor
  • Restructurare și gestionarea datelor complexe, cum ar fi coloane text sau date JSON
Restructurarea datelor cu pandas

De ce este important

  • Seturi de date ordonate
  • Datele nu sunt în formatul potrivit pentru analiză:
    • Lizibilitate umană vs. analiză statistică
  • Datele imbricate în DataFrame-uri sunt complexe de gestionat
  • Statistici sumare pentru DataFrame-uri cu index multinivel
Restructurarea datelor cu pandas

Forma datelor

  • Modul în care un set de date este organizat în rânduri și coloane
fifa_players = pd.read_csv("fifa_players.csv")
fifa_players
                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona
1  Cristiano Ronaldo     34      Portugal       Juventus
2    Neymar da Silva     27        Brazil  Saint-Germain
fifa_players.shape
(3, 4)
Restructurarea datelor cu pandas

Formatul wide

fifa_players

                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona
1  Cristiano Ronaldo     34      Portugal       Juventus
2    Neymar da Silva     27        Brazil  Saint-Germain

Restructurarea datelor cu pandas

Formatul wide

fifa_players
                         vv  
                name   | age | nationality          club
0       Lionel Messi   | 32  |  Argentina      Barcelona
1  Cristiano Ronaldo   | 34  |   Portugal       Juventus
2    Neymar da Silva   | 27  |     Brazil  Saint-Germain
                         ^^
  • Fiecare caracteristică este într-o coloană separată
Restructurarea datelor cu pandas

Formatul wide

fifa_players

                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona <--
1  Cristiano Ronaldo     34      Portugal       Juventus <--
2    Neymar da Silva     27        Brazil  Saint-Germain <--

  • Fiecare caracteristică este într-o coloană separată
  • Fiecare rând conține mai multe caracteristici ale aceluiași jucător
Restructurarea datelor cu pandas

Formatul wide

fifa_players
                name    age   nationality           club
0       Lionel Messi     32     Argentina      Barcelona
 --------------------------------------------------------
1    Cristiano Ronaldo    NaN  <-    Portugal       Juventus
 --------------------------------------------------------
2    Neymar da Silva     27        Brazil  Saint-Germain
  • Fiecare caracteristică este într-o coloană separată
  • Fiecare rând conține mai multe caracteristici ale aceluiași jucător
  • Fără repetiții, dar cu multe valori lipsă
  • Statistici simple și imputare
Restructurarea datelor cu pandas

Formatul long

fifa_players_long.head()
               name     variable     value
0 Cristiano Ronaldo  nationality   Portugal 
1 Cristiano Ronaldo         club   Juventus 
2      Lionel Messi          age         32
3      Lionel Messi  nationality  Argentina 
4      Lionel Messi         club  Barcelona
Restructurarea datelor cu pandas

Formatul long

fifa_players_long.head()
               name     variable     value
0   Cristiano Ronaldo  nationality   Portugal <--
1 Cristiano Ronaldo         club  Juventus 
2      Lionel Messi          age        32
3        Lionel Messi  nationality  Argentina <--
4      Lionel Messi         club  Barcelona
  • Fiecare rând reprezintă o caracteristică
Restructurarea datelor cu pandas

Formatul long

fifa_players_long.head()
               name     variable     value
0   Cristiano Ronaldo  nationality   Portugal <--
1   Cristiano Ronaldo         club   Juventus <--
2      Lionel Messi          age         32
3      Lionel Messi  nationality  Argentina 
4      Lionel Messi         club  Barcelona
  • Fiecare rând reprezintă o caracteristică
  • Mai multe rânduri pentru fiecare jucător
Restructurarea datelor cu pandas

Formatul long

fifa_players_long.head()
  |              name |    variable      value
0 | Cristiano Ronaldo | nationality   Portugal
1 | Cristiano Ronaldo |        club   Juventus
2 |      Lionel Messi |         age         32
3 |      Lionel Messi | nationality  Argentina 
4 |      Lionel Messi |        club  Barcelona
        ^^^^^^^^^^^
  • Fiecare rând reprezintă o caracteristică
  • Mai multe rânduri pentru fiecare jucător
  • O coloană (name) pentru identificarea jucătorului
Restructurarea datelor cu pandas

Formatul long

fifa_players_long.head()
               name     variable     value
0 Cristiano Ronaldo  nationality   Portugal 
1 Cristiano Ronaldo         club   Juventus 
2      Lionel Messi          age         32
3      Lionel Messi  nationality  Argentina 
4      Lionel Messi         club  Barcelona
  • Fiecare rând reprezintă o caracteristică
  • Mai multe rânduri pentru fiecare jucător
  • O coloană (name) pentru identificarea jucătorului
  • Date ordonate:
    • Mai ușor de rezumat
    • Perechi cheie-valoare
    • Preferate pentru analiză și reprezentare grafică
Restructurarea datelor cu pandas

Restructurarea datelor

  • Transformarea structurii unui DataFrame sau Series pentru analiză
    • Transpunerea unui DataFrame
fifa_players.set_index('club')
                             name  age  nationality
         club 
    Barcelona        Lionel Messi   32    Argentina
     Juventus   Cristiano Ronaldo  NaN     Portugal
Saint-Germain     Neymar da Silva   27       Brazil
Restructurarea datelor cu pandas

Restructurarea datelor

  • Transformarea structurii unui DataFrame sau Series pentru analiză
    • Transpunerea unui DataFrame
fifa_players.set_index('club')[['name', 'nationality']]
                               name   nationality 
         club 
    Barcelona        Lionel Messi       Argentina
     Juventus   Cristiano Ronaldo        Portugal
Saint-Germain     Neymar da Silva          Brazil
Restructurarea datelor cu pandas

Restructurarea datelor

  • Transformarea structurii unui DataFrame sau Series pentru analiză
    • Transpunerea unui DataFrame
fifa_players.set_index('club')[['name', 'nationality']].transpose()
       club         Barcelona           Juventus     Saint-Germain
       name      Lionel Messi  Cristiano Ronaldo   Neymar da Silva
nationality         Argentina           Portugal            Brazil
Restructurarea datelor cu pandas

Restructurarea datelor

  • Conversia datelor din formatul wide în long și invers
  • Unitatea de analiză:
    • Formatul long -> caracteristică a unui jucător
    • Formatul wide -> fiecare jucător
Restructurarea datelor cu pandas

Transformare din wide în long

  • Se realizează cu funcții pandas, precum:

    • .melt()
    • .wide_to_long()
Restructurarea datelor cu pandas

Transformare din long în wide

  • Se realizează cu metode pandas, de exemplu:

    • .pivot()
    • .pivot_table()
Restructurarea datelor cu pandas

Să exersăm!

Restructurarea datelor cu pandas

Preparing Video For Download...