web-dev-qa-db-fra.com

Convertir Pandas DataFrame au format JSON

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.

14
user3447653

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)
22
Nickil Maveli

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.

10
sagarsar

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')
6
Brad Solomon

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)
0
Miguel Gomez

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}}

0
J Rishabh Kumar