web-dev-qa-db-fra.com

Lecture du fichier Json en tant qu'erreur Pandas Dataframe

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 

15
Baktaawar

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  
12
jezrael

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
3
Brad Solomon

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.

2
BeeCee