2016-04-25 24 views
7

Aşağıdaki gibi bir Json dosyam var. Bu bir dizi listesi. Bunu kullanarak bunu okuduğundaJson dosyasını Pandas Dataframe hatası olarak okuma

[{"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}.....] 

:

aşağıdaki hata
data=pd.read_json('dataset.json') 

Ben olsun:

ValueError: Expected object or value

Ben de bu çalıştı:

from ast import literal_eval 

with open('dataset.json') as f: 
    data = literal_eval(f.read()) 

df = pd.DataFrame(data) 

Aşağıdaki verir hata:

ValueError: malformed string

Düzenleme:

bile Json.loads çalışmaz. Denedim bu:

import json 
data=json.loads('dataset.json') 

ValueError: No JSON object could be decoded

Json dosya 13.5MB ama çok büyük miktarlarda veriyi var gibi gözüküyor.

+0

'json.loads' çalışır mı? ('import json 'first ...) – IanS

+0

Hayır. Bana bu hatayı verdiğini denedim. Kontrol edildi. – Baktaawar

+0

Bence bu cevaptan faydalanabilirsiniz: http://stackoverflow.com/a/20644150/5276797 – IanS

cevap

7

Sana file.json okumak için modülün json kullanabilirsiniz düşünmek ve sonra 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 
+1

Bence OP örneğini verdi ve bu hata büyük dosyada bir yere gömüldü ... – IanS

+1

Hmmm, I İlk hatayı ('ValueError: Beklenen nesne veya değer ') ve ikinci hatayı (' ValueError: hatalı biçimlendirilmiş dizge') örnekle birlikte alın. Ama benim çözümüm çok iyi çalışıyor. – jezrael

+0

tamam. Ben sadece Jezrael'in önerdiği şeyi yaptım. Ve çalıştı. Ancak sütun sıram farklı. Şehrin ilk sütun olması gerekir, ama aynı zamanda o da farklı bir sırada geliyor. Aynı sütun sırasını nasıl alacağımız hakkında bir fikrin var mı? – Baktaawar

0

Sen (json sözlükleri listesi gibi görünür) "kayıtları" biçimlendirme kullanıldığına dikkat pandas belirtmek gerekir 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 
+0

@IanS Bu, read_json'un neden kendi başına başarısız olduğu hakkındaki sorunuza cevap verebilir –