Python 将包含多行 JSON 的文件加载到 Pandas 中
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/30088006/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Loading a file with more than one line of JSON into Pandas
提问by user62198
I am trying to read in a JSON file into Python pandas (0.14.0) data frame. Here is the first line line of the JSON file:
我正在尝试将 JSON 文件读入 Python pandas (0.14.0) 数据框。这是 JSON 文件的第一行:
{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "P_Mk0ygOilLJo4_WEvabAA", "review_id": "OeT5kgUOe3vcN7H6ImVmZQ", "stars": 3, "date": "2005-08-26", "text": "This is a pretty typical cafe. The sandwiches and wraps are good but a little overpriced and the food items are the same. The chicken caesar salad wrap is my favorite here but everything else is pretty much par for the course.", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"}
I am trying do the following:df = pd.read_json(path)
.
我努力做到以下几点:df = pd.read_json(path)
。
I am getting the following error (with full traceback):
我收到以下错误(带有完整回溯):
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/d/anaconda/lib/python2.7/site-packages/pandas/io/json.py", line 198, in read_json
date_unit).parse()
File "/Users/d/anaconda/lib/python2.7/site-packages/pandas/io/json.py", line 266, in parse
self._parse_no_numpy()
File "/Users/d/anaconda/lib/python2.7/site-packages/pandas/io/json.py", line 483, in _parse_no_numpy
loads(json, precise_float=self.precise_float), dtype=None)
ValueError: Trailing data
What is the Trailing data
error? How do I read it into a data frame?
Trailing data
错误是什么?如何将其读入数据框?
Following some suggestions, here are few lines of the .json file:
根据一些建议,这里是 .json 文件的几行:
{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "P_Mk0ygOilLJo4_WEvabAA", "review_id": "OeT5kgUOe3vcN7H6ImVmZQ", "stars": 3, "date": "2005-08-26", "text": "This is a pretty typical cafe. The sandwiches and wraps are good but a little overpriced and the food items are the same. The chicken caesar salad wrap is my favorite here but everything else is pretty much par for the course.", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"}
{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "TNJRTBrl0yjtpAACr1Bthg", "review_id": "qq3zF2dDUh3EjMDuKBqhEA", "stars": 3, "date": "2005-11-23", "text": "I agree with other reviewers - this is a pretty typical financial district cafe. However, they have fantastic pies. I ordered three pies for an office event (apple, pumpkin cheesecake, and pecan) - all were delicious, particularly the cheesecake. The sucker weighed in about 4 pounds - no joke.\n\nNo surprises on the cafe side - great pies and cakes from the catering business.", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"}
{"votes": {"funny": 0, "useful": 0, "cool": 0}, "user_id": "H_mngeK3DmjlOu595zZMsA", "review_id": "i3eQTINJXe3WUmyIpvhE9w", "stars": 3, "date": "2005-11-23", "text": "Decent enough food, but very overpriced. Just a large soup is almost . Their specials are .50, and with an overpriced soda or juice, it's approaching . A bit much for a cafe lunch!", "type": "review", "business_id": "Jp9svt7sRT4zwdbzQ8KQmw"}
This .json file I am using contains one JSON object in each line as per the specification.
我使用的这个 .json 文件根据规范在每一行中包含一个 JSON 对象。
I tried the jsonlint.comwebsite as suggested and it gives the following error:
我按照建议尝试了jsonlint.com网站,但出现以下错误:
Parse error on line 14:
...t7sRT4zwdbzQ8KQmw"}{ "votes": {
----------------------^
Expecting 'EOF', '}', ',', ']'
采纳答案by Andrew
From version 0.19.0 of Pandas you can use the lines
parameter, like so:
从 Pandas 0.19.0 版本开始,您可以使用该lines
参数,如下所示:
import pandas as pd
data = pd.read_json('/path/to/file.json', lines=True)
回答by Artem
You have to read it line by line. For example, you can use the following code provided by ryptophanon reddit:
你必须一行一行地阅读它。例如,您可以在reddit上使用ryptophan提供的以下代码:
import pandas as pd
# read the entire file into a python array
with open('your.json', 'rb') as f:
data = f.readlines()
# remove the trailing "\n" from each line
data = map(lambda x: x.rstrip(), data)
# each element of 'data' is an individual JSON object.
# i want to convert it into an *array* of JSON objects
# which, in and of itself, is one large JSON object
# basically... add square brackets to the beginning
# and end, and have all the individual business JSON objects
# separated by a comma
data_json_str = "[" + ','.join(data) + "]"
# now, load it into pandas
data_df = pd.read_json(data_json_str)
回答by Triguna
The following code helped me to load JSON
content into a dataframe
:
以下代码帮助我将JSON
内容加载到dataframe
:
import json
import pandas as pd
with open('Appointment.json', encoding="utf8") as f:
data = f.readlines()
data = [json.loads(line) for line in data] #convert string to dict format
df = pd.read_json(data) # Load into dataframe
回答by szeitlin
I had a similar problem.
我有一个类似的问题。
It turns out that pd.read_json(myfile.json)
will search in the parent folder automatically, but it returns this 'trailing data' error if you're not in the same folder as the file.
事实证明,pd.read_json(myfile.json)
它将自动在父文件夹中搜索,但如果您与文件不在同一文件夹中,它会返回此“尾随数据”错误。
I figured it out, because when I tried to do it with open('myfile.json', 'r')
, and I got a FileNotFound
error, so I checked the paths.
我想通了,因为当我尝试使用 时open('myfile.json', 'r')
,我遇到了FileNotFound
错误,所以我检查了路径。
I had failed to move myfile.json into the same folder as my notebook.
我未能将 myfile.json 移动到与我的笔记本相同的文件夹中。
Changing it to pd.read_json('../myfile.json')
just worked.
将其更改为pd.read_json('../myfile.json')
刚刚工作。