2016-04-25 27 views
7

Tôi có tệp Json như sau. Đó là một danh sách các dicts.Đọc tệp Json dưới dạng lỗi Pandas Dataframe

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

Khi tôi đọc này sử dụng này:

data=pd.read_json('dataset.json') 

tôi nhận được lỗi sau:

ValueError: Expected object or value

Tôi cố gắng này quá:

from ast import literal_eval 

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

df = pd.DataFrame(data) 

Nó cung cấp như sau lỗi:

ValueError: malformed string

Edit:

Thậm chí Json.loads không hoạt động. Cố gắng này:

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

ValueError: No JSON object could be decoded

Các tập tin JSON là 13.5MB nhưng nó dường như có một lượng lớn dữ liệu.

+0

Công cụ 'json.loads' có hoạt động không? ('import json' first ...) – IanS

+0

No. Tôi đã thử rằng nó đã cho tôi lỗi này. Kiểm tra nó đi. – Baktaawar

+0

Tôi nghĩ rằng bạn có thể hưởng lợi từ câu trả lời này: http://stackoverflow.com/a/20644150/5276797 – IanS

Trả lời

7

Tôi nghĩ rằng bạn có thể sử dụng modul json cho việc đọc file.json và sau đó 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

Tôi nghĩ rằng ví dụ OP đã làm việc, và rằng lỗi được chôn ở đâu đó trong tệp lớn ... – IanS

+1

Hmmm, tôi nhận được lỗi đầu tiên ('ValueError: Đối tượng dự kiến ​​hoặc giá trị') và lỗi thứ hai (' ValueError: string invalidform') quá với mẫu. Nhưng giải pháp của tôi hoạt động rất tốt. – jezrael

+0

ok. Tôi chỉ làm những gì @jezrael gợi ý. Va no đa hoạt động. Tuy nhiên, thứ tự cột của tôi là khác nhau. Giống như thành phố nên là cột đầu tiên nhưng nó đến theo thứ tự khác nhau như ông đang nhận được quá. Bất kỳ ý tưởng làm thế nào để có được thứ tự cùng một tên cột? – Baktaawar

0

Bạn cần phải chỉ ra cho gấu trúc rằng "hồ sơ" định dạng (nơi json xuất hiện giống như một danh sách các từ điển) được sử dụng trong 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 Điều này có thể trả lời câu hỏi của bạn về lý do tại sao 'read_json' không thành công ở đây –

Các vấn đề liên quan