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
Links | Site |
---|---|
pandas.DataFrame.to_json | pandas.pydata.org |
How to read a JSON file using python ? | moonbooks |
How to save a dictionary in a json file with python ? | moonbooks |