Чтение файла Json как ошибка Pandas Dataframe
У меня есть Json файл следующим образом. Это список диктонов.
[{"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}.....]
Когда я прочитал это, используя это:
data=pd.read_json('dataset.json')
Я получаю следующую ошибку:
ValueError: ожидаемый объект или значение
Я тоже пробовал:
from ast import literal_eval
with open('dataset.json') as f:
data = literal_eval(f.read())
df = pd.DataFrame(data)
Это дает следующую ошибку:
ValueError: неверная строка
Редактировать:
Даже Json.loads не работает. Пробовал это:
import json
data=json.loads('dataset.json')
ValueError: объект JSON не может быть декодирован
Файл Json составляет 13,5 МБ, но, похоже, он имеет огромное количество данных.
Ответы
Ответ 1
Я думаю, вы можете использовать modul json
для чтения file.json
а затем 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
Ответ 2
Вам нужно указать Pandas, что форматирование "записей" (где JSON выглядит как список словарей) используется в 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
У меня была такая же ошибка. Оказывается, он не может найти файл. Я изменил путь, и pd.read_json
работал нормально. Что касается json.loads
, это может быть полезно.
Ответ 4
Следующее сработало для меня, когда произошел сбой pd.read_json: открыть файл, загрузить с обычным json.load, затем загрузить в фрейм данных pandas.
import pandas as pd
import json
openfile=open('file.json')
jsondata=json.load(openfile)
df=pd.DataFrame(jsondata)
openfile.close()
print(df)