J'ai un Pandas DataFrame
avec deux colonnes - une avec le nom de fichier et l'autre avec l'heure à laquelle il a été généré:
File Hour
F1 1
F1 2
F2 1
F3 1
J'essaie de le convertir en un fichier JSON au format suivant:
{"File":"F1","Hour":"1"}
{"File":"F1","Hour":"2"}
{"File":"F2","Hour":"1"}
{"File":"F3","Hour":"1"}
Lorsque j'utilise la commande DataFrame.to_json(orient = "records")
, j'obtiens les enregistrements au format ci-dessous:
[{"File":"F1","Hour":"1"},
{"File":"F1","Hour":"2"},
{"File":"F2","Hour":"1"},
{"File":"F3","Hour":"1"}]
Je me demande simplement s'il existe une option pour obtenir le fichier JSON au format souhaité. Toute aide serait appréciée.
Le résultat obtenu après DF.to_json
est une string
. Ainsi, vous pouvez simplement le découper en fonction de vos besoins et en supprimer les virgules.
out = df.to_json(orient='records')[1:-1].replace('},{', '} {')
Pour écrire la sortie dans un fichier texte, vous pouvez faire:
with open('file_name.txt', 'w') as f:
f.write(out)
Je pense que ce que recherche le PO, c'est:
with open('temp.json', 'w') as f:
f.write(df.to_json(orient='records', lines=True))
Cela devrait faire l'affaire.
Dans les nouvelles versions de pandas (0.20.0+, je crois), cela peut être fait directement:
df.to_json('temp.json', orient='records', lines=True)
La compression directe est également possible:
df.to_json('temp.json.gz', orient='records', lines=True, compression='gzip')
Pour transformer un dataFrame en un JSON réel (pas une chaîne), j'utilise:
from io import StringIO
import json
import DataFrame
buff=StringIO()
#df is your DataFrame
df.to_json(path_or_buf=buff,orient='records')
dfJson=json.loads(buff)
au lieu d'utiliser dataframe.to_json(orient = “records”)
, utilisez dataframe.to_json(orient = “index”)
my ci-dessus, convertissez le dataframe au format json de dict comme {index -> {colonne -> valeur}}