Python 将Json文件读取为数据帧错误
我有一个Json文件,如下所示。这是一张单子Python 将Json文件读取为数据帧错误,python,json,pandas,Python,Json,Pandas,我有一个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
[{"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.5MB,但它似乎有大量的数据 我认为您可以使用modul
json
读取file.json
,然后使用DataFrame构造函数
:
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
您需要向Pandas指出,
datasets.JSON
中使用了“records”格式(其中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
我也犯了同样的错误。结果它找不到文件。我修改了路径并
pd.read\u json
运行良好。至于json.loads
,可能会有帮助。当pd.read\u json失败时,以下内容对我有用:
打开文件,用普通的json.load加载,然后加载到数据帧中
import pandas as pd
import json
openfile=open('file.json')
jsondata=json.load(openfile)
df=pd.DataFrame(jsondata)
openfile.close()
print(df)
对我来说,这是一个路径问题。我必须使用的路径取决于运行python文件的目录。可能尝试将“cd”放入python文件的目录中,然后读取json('dataset.json')应该可以工作。我必须添加参数
lines=True
,以使其工作,例如:
pd.read_json("dataset.json", lines=True)
或者,您可以这样做:
import json
import pandas as pd
with open("dataset.json") as f:
df = pd.DataFrame([json.loads(l) for l in f.readlines()])
print(df) # Shows data frame as expected
json.loads
工作吗?(import json
first…)没有。我试过它给了我这个错误。检查编辑。我认为您可能会从这个答案中受益:我认为OP给出的示例很有效,并且错误隐藏在大文件中的某个地方……嗯,我在示例中也会得到第一个错误(ValueError:Expected object or value
),第二个错误(ValueError:mableformed string
)。但是我的解决方案很有效。我只是按照@jezrael的建议做了。它成功了。但是,我的列顺序不同。像城市应该是第一列,但它的到来顺序不同,因为他也越来越。知道如何获得相同的列名顺序吗?@jezrael知道为什么read\u json
会失败吗?为什么你的解决方案有效?甚至json.loads
(带s)也会失败……我认为它失败了,因为json
文件中的字典列表。它是有效的json
,但似乎read_json
不支持这些类型的json。我移动了jupyter笔记本,jupyter无法调整文件路径,因此出现了相同的错误。Pandas正在返回最糟糕的错误消息。