J'ai un fichier Json comme suit. C'est une liste de dict.
[{"city": "ab", "trips": 4, "date": "2014-01-25", "value": 4.7, "price": 1.1, "request_date": "2014-06-17", "medium": "iPhone", "%price": 15.4, "type": true, "Weekly_pct": 46.2, "avg_dist": 3.67, "avg_price": 5.0}, {"city": "bc", "trips": 0, "date": "2014-01-29", "value": 5.0, "price": 1.0, "request_date": "2014-05-05", "medium": "Android", "%price": 0.0, "type": false, "weekly_pct": 50.0, "avg_dist": 8.26, "avg_price": 5.0}.....]
Quand j'ai lu ceci en utilisant ceci:
data=pd.read_json('dataset.json')
Je reçois l'erreur suivante:
ValueError: objet ou valeur attendu
J'ai aussi essayé ça:
from ast import literal_eval
with open('dataset.json') as f:
data = literal_eval(f.read())
df = pd.DataFrame(data)
Cela donne l'erreur suivante:
ValueError: chaîne malformée
Modifier:
Même Json.loads ne fonctionne pas. J'ai essayé ceci:
import json
data=json.loads('dataset.json')
ValueError: aucun objet JSON n'a pu être décodé
Le fichier Json fait 13,5 Mo mais il semble contenir une quantité énorme de données
Je pense que vous pouvez utiliser le module json
pour lire file.json
puis DataFrame constructor
:
import pandas as pd
import json
with open('file.json') as f:
data = json.load(f)
print data
[{u'city': u'ab', u'medium': u'iPhone', u'request_date': u'2014-06-17', u'price': 1.1, u'Weekly_pct': 46.2, u'value': 4.7, u'%price': 15.4, u'avg_price': 5.0, u'date': u'2014-01-25', u'avg_dist': 3.67, u'type': True, u'trips': 4}, {u'city': u'bc', u'medium': u'Android', u'request_date': u'2014-05-05', u'price': 1.0, u'weekly_pct': 50.0, u'value': 5.0, u'%price': 0.0, u'avg_price': 5.0, u'date': u'2014-01-29', u'avg_dist': 8.26, u'type': False, u'trips': 0}]
print pd.DataFrame(data)
%price Weekly_pct avg_dist avg_price city date medium price \
0 15.4 46.2 3.67 5.0 ab 2014-01-25 iPhone 1.1
1 0.0 NaN 8.26 5.0 bc 2014-01-29 Android 1.0
request_date trips type value weekly_pct
0 2014-06-17 4 True 4.7 NaN
1 2014-05-05 0 False 5.0 50.0
Vous devez indiquer aux Pandas que le formatage "enregistrements" (où le JSON apparaît comme une liste de dictionnaires) est utilisé dans datasets.json
.
res = pd.read_json('input/dataset.json', orient='records')
print(res.iloc[:, :5])
%price Weekly_pct avg_dist avg_price city
0 15.4 46.2 3.67 5 ab
1 0.0 NaN 8.26 5 bc
J'ai eu la même erreur. Il s'avère qu'il n'a pas pu trouver le fichier. J'ai modifié le chemin et pd.read_json
a bien fonctionné. En ce qui concerne json.loads
, this pourrait être utile.