我有一个Python 3.8.5脚本,它从API获取JSON,保存到磁盘,读取JSON到DF。它起作用了。
df = pd.io.json.read_json('json_file', orient='records')我想尝试IO buffer,这样我就不必读/写磁盘,但我得到了一个错误。代码如下:
from io import StringIO
io = StringIO()
json_out = []
# some code to append API results to json_out
json.dump(json_out, io)
df = pd.io.json.read_json(io.getvalue())在最后一行,我得到了错误
File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\util\_decorators.py", line 199, in wrapper
return func(*args, **kwargs)
File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\util\_decorators.py", line 296, in wrapper
return func(*args, **kwargs)
File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 618, in read_json
result = json_reader.read()
File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 755, in read
obj = self._get_object_parser(self.data)
File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 777, in _get_object_parser
obj = FrameParser(json, **kwargs).parse()
File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 886, in parse
self._parse_no_numpy()
File "C:\Users\chap\Anaconda3\lib\site-packages\pandas\io\json\_json.py", line 1119, in _parse_no_numpy
loads(json, precise_float=self.precise_float), dtype=None
ValueError: Trailing dataJSON采用列表格式。所以这不是实际的json,但当我写到磁盘时,它看起来像这样:
json = [
{"state": "North Dakota",
"address": "123 30th st E #206",
"account": "123"
},
{"state": "North Dakota",
"address": "456 30th st E #206",
"account": "456"
}
]考虑到它在第一种情况下(从磁盘写入/读取)有效,我不知道如何进行故障排除。如何解决缓冲区中的问题?实际数据主要是文本,但也有一些数字字段。
发布于 2021-11-19 21:45:02
不知道你出了什么问题,这对我很有效:
import json
import pandas as pd
from io import StringIO
json_out = [
{"state": "North Dakota",
"address": "123 30th st E #206",
"account": "123"
},
{"state": "North Dakota",
"address": "456 30th st E #206",
"account": "456"
}
]
io = StringIO()
json.dump(json_out, io)
df = pd.io.json.read_json(io.getvalue())
print(df)让我相信追加API数据的代码有问题...
但是,如果您有一个字典列表,则不需要IO步骤。你可以这样做:
pd.DataFrame(json_out)编辑:当我的json末尾有一个逗号时,我想我记得这个错误,如下所示:
[
{
"hello":"world",
},
]https://stackoverflow.com/questions/70041152
复制相似问题