我有一個 Python 3.8.5 腳本,它從 API 獲取 JSON,保存到磁盤,將 JSON 讀取到 DF。有用。
df = pd.io.json.read_json('json_file', orient='records')
我想嘗試使用 IO 緩沖區,這樣我就不必讀/寫磁盤,但出現錯誤。代碼是這樣的:
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 data
JSON 采用串列格式。所以這不是實際的 json,但是當我寫入磁盤時它看起來像這樣:
json = [
{"state": "North Dakota",
"address": "123 30th st E #206",
"account": "123"
},
{"state": "North Dakota",
"address": "456 30th st E #206",
"account": "456"
}
]
鑒于它在第一種情況下(從磁盤寫入/讀取)有效,我不知道如何進行故障排除。如何解決緩沖區中的問題?實際資料主要是文本,但有一些數字欄位。
uj5u.com熱心網友回復:
不知道你出了什么問題,這對我有用:
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://www.uj5u.com/yidong/361630.html
