Importer des données imbriquées dans un DataFrame

Remanier des données avec pandas

Maria Eugenia Inzaugarat

Data Scientist

Révision

  • Remodeler des DataFrame et des Series
  • Décompresser les listes dans des colonnes
  • Scinder et concaténer des chaînes
Remanier des données avec pandas

Format JSON

  • JavaScript Object Notation
  • Format d'échange de données
  • Facile à lire et à écrire pour les humains
  • Facile à analyser et à générer pour les machines
Remanier des données avec pandas

Format JSON

my_writer
{
  "first" : "Mary",
  "last" : "Shelley",
  "country" : "England",
  "books" : 12
}
Remanier des données avec pandas

JSON imbriqué

writers
writers = [
            {
              "first": "Mary",
              "last": "Shelley",
              "books": {"title": "Frankenstein", "year": 1818}
            },
            {
              "first": "Ernest",
              "last": "Hemingway",
              "books": {"title": "The Old Man and the Sea", "year": 1951}
            }
          ]
Remanier des données avec pandas

Normalisation des données

from pandas import json_normalize
json_normalize(writers)
    first       last              books.title  books.year
0    Mary    Shelley             Frankenstein        1818
1  Ernest  Hemingway  The Old Man and the Sea        1951
Remanier des données avec pandas

Normalisation des données

writers_norm = json_normalize(writers, sep='_')
writers_norm
    first       last              books_title  books_year
0    Mary    Shelley             Frankenstein        1818
1  Ernest  Hemingway  The Old Man and the Sea        1951
Remanier des données avec pandas

Normalisation des données

pd.wide_to_long(writers_norm, stubnames=['books'], i=['first', 'last'], j='feature', sep='_', suffix='\w+')
                                            books
first  last      feature                         
Mary   Shelley   title               Frankenstein
                 year                        1818
Ernest Hemingway title    The Old Man and the Sea
                 year                        1951
Remanier des données avec pandas

JSON complexe

writers
[
    {'name': 'Mary',
     'last': 'Shelley',
     'books': [{'title': 'Frankestein', 'year': 1818},
                {'title': 'Mathilda ', 'year': 1819},
                {'title': 'The Last Man', 'year': 1826}]},
    {'name': 'Ernest',
     'last': 'Hemmingway',
     'books': [{'title': 'The Old Man and the Sea', 'year': 1951},
               {'title': 'The Sun Also Rises', 'year': 1927}]}
]
Remanier des données avec pandas

JSON complexe

json_normalize(writers)
     name        last                                              books
0    Mary     Shelley  [{'title': 'Frankestein', 'year': 1818}, {'tit...
1  Ernest  Hemmingway  [{'title': 'The Old Man and the Sea', 'year': ...
Remanier des données avec pandas

Chemin des enregistrements

json_normalize(writers, record_path='books')
                     title  year
0              Frankestein  1818
1                Mathilda   1819
2             The Last Man  1826
3  The Old Man and the Sea  1951
4       The Sun Also Rises  1927
Remanier des données avec pandas

Métadonnées

json_normalize(writers, record_path='books', meta=['name', 'last'])
                     title  year    name        last
0              Frankestein  1818    Mary     Shelley
1                Mathilda   1819    Mary     Shelley
2             The Last Man  1826    Mary     Shelley
3  The Old Man and the Sea  1951  Ernest  Hemmingway
4       The Sun Also Rises  1927  Ernest  Hemmingway
Remanier des données avec pandas

Passons à la pratique !

Remanier des données avec pandas

Preparing Video For Download...