Comment sauvegarder une dataframe pandas dans un fichier json ?

Published: 03 septembre 2022

Tags: Python; Pandas; DataFrame; JSON;

DMCA.com Protection Status

Exemples de comment stocker (sauvegarder) une dataframe pandas dans un fichier json

Créer une dataframe avec pandas

Commençons par créer un simple dataframe:

import pandas as pd
import numpy as np

data = np.random.randint(99, size=(3,3))

df = pd.DataFrame(data=data,columns=['A','B','C'])

print(df)

donne par exemple

        A   B   C
0  78  96   0
1   4  32  76
2  72  16  74

Sauvegarder une dataframe pandas dans un fichier json

Pour sauvegarder une dataframe pandas dans un fichier json, une première étape consiste à utiliser pandas.DataFrame.to_json, voici un exemple en utilisant l'option orient="split" (la plus couramment utilisée) :

res = df.to_json(orient="split")

donne

{"columns":["A","B","C"],"index":[0,1,2],"data":[[78,96,0],[4,32,76],[72,16,74]]}

Notez que:

type(res)

est une chaîne de caractères.

Exemples utilisant différentes options :

df.to_json()

donne

{"A":{"0":78,"1":4,"2":72},"B":{"0":96,"1":32,"2":16},"C":{"0":0,"1":76,"2":74}}

pareil que

df.to_json(orient="columns")

donne

{"A":{"0":78,"1":4,"2":72},"B":{"0":96,"1":32,"2":16},"C":{"0":0,"1":76,"2":74}}

Avec orient="index"

df.to_json(orient="index")

donne

{"0":{"A":78,"B":96,"C":0},"1":{"A":4,"B":32,"C":76},"2":{"A":72,"B":16,"C":74}}

Avec orient="records"

df.to_json(orient="records")

donne

[{"A":78,"B":96,"C":0},{"A":4,"B":32,"C":76},{"A":72,"B":16,"C":74}]

Avec orient="values"

df.to_json(orient="values")

donne

[[78,96,0],[4,32,76],[72,16,74]]

Avec orient="table"

df.to_json(orient="table")

donne

{"schema":{"fields":[{"name":"index","type":"integer"},{"name":"A","type":"integer"},{"name":"B","type":"integer"},{"name":"C","type":"integer"}],"primaryKey":["index"],"pandas_version":"0.20.0"},"data":[{"index":0,"A":78,"B":96,"C":0},{"index":1,"A":4,"B":32,"C":76},{"index":2,"A":72,"B":16,"C":74}]}

Convertir la chaîne de caractères en dictionnaire

Étape suivante, convertissez la chaîne en dictionnaire à l'aide du module python json :

import json

parsed = json.loads(res)

print( type(parsed) )

print( json.dumps(parsed, indent=4) )

donne

<class 'dict'>

et

{
        "columns": [
                "A",
                "B",
                "C"
        ],
        "index": [
                0,
                1,
                2
        ],
        "data": [
                [
                        78,
                        96,
                        0
                ],
                [
                        4,
                        32,
                        76
                ],
                [
                        72,
                        16,
                        74
                ]
        ]
}

Enregistrez le dictionnaire dans un fichier json

with open('data.json', 'w') as fp:
        json.dump(res_d, fp)

Essayez de lire le fichier json avec python

Vérifiez si cela fonctionne :

with open('data.json') as json_data:
        data_dict = json.load(json_data)
        print(data_dict)

devrait dooner

{'columns': ['A', 'B', 'C'], 'index': [0, 1, 2], 'data': [[78, 96, 0], [4, 32, 76], [72, 16, 74]]}

Un autre exemple avec plusieurs index

tuples = [('Land', 'Liquid'),
                    ('Land', 'Ice'),
                    ('Ocean', 'Liquid'),
                    ('Ocean', 'Ice')]

index = pd.MultiIndex.from_tuples(tuples, names=["Id1", "Id2"])

df = pd.DataFrame({'Count A': [12., 70., 30., 20.], 'Count B': [12., 70., 30., 20.]}, index=index)

print(df)

donne

              Count A  Count B
Id1   Id2                     
Land  Liquid     12.0     12.0
      Ice        70.0     70.0
Ocean Liquid     30.0     30.0
      Ice        20.0     20.0

alors

df.to_json(orient="split")

donne

{"columns":["Count A","Count B"],"index":[["Land","Liquid"],["Land","Ice"],["Ocean","Liquid"],["Ocean","Ice"]],"data":[[12.0,12.0],[70.0,70.0],[30.0,30.0],[20.0,20.0]]}

et

import json

res = df.to_json(orient="split")

res_d = json.loads(res)

with open('data.json', 'w') as fp:
        json.dump(res_d, fp)

créer un fichier json.

Références