【问题标题】:Multiple Json in Flask Response to convert to Pandas DataFrameFlask Response 中的多个 Json 转换为 Pandas DataFrame
【发布时间】:2018-08-10 02:46:09
【问题描述】:

我有以下来自 Flask Rest API 的 JSON 结构。 根据我们查询的资产数量,它不止一个 JSON,我无法 将其转换为 Pandas 数据框。

from flask import Flask
import requests
import pandas as pd
import json

url = "http://localhost:5000/getpqdata"
random_cols = ['AAPL', 'MSFT']
JsonOutput = {'Assets': random_cols}

headers = {'Content-type': 'application/json'}
response = requests.post(url, json=JsonOutput, headers=headers)

rawdata = response.text

原始数据如下:

rawdata = '''[{"APPL": 1.067638}, {"AAPL": -1.996081}]
        [{"MSFT": 0.086638}, {"MSFT": -0.926081}]'''

data = json.loads(rawdata)

df = pd.DataFrame(data)
print(df)

它给出以下错误。

C:\Python36>python D:\Python\pyarrow\RestfulAPI\test.py
Traceback (most recent call last):
File "D:\Python\pyarrow\RestfulAPI\test.py", line 36, in <module>
data = json.loads(rawdata)
File "C:\Python36\lib\json\__init__.py", line 354, in loads
return _default_decoder.decode(s)
File "C:\Python36\lib\json\decoder.py", line 342, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 2 column 13 (char 54)

【问题讨论】:

    标签: python json pandas rest flask


    【解决方案1】:

    您遇到的问题与 pandas 无关,而是与 JSON 解码有关。 json.loads(...) 只支持一个 JSON 对象。您的 rawdata 中有 2 个 JSON 对象。因此,当它到达第二行时,它会告诉您有额外的数据。您可以在this 答案中看到潜在的解决方案。

    简而言之,你可以这样做:

    def parse_json_stream(stream):
        decoder = json.JSONDecoder()
        while stream:
            obj, idx = decoder.raw_decode(stream)
            yield obj
            stream = stream[idx:].lstrip()
    
    parsed_data = list(parse_json_stream(rawdata))
    print(parsed_data)
    
    [[{'APPL': 1.067638}, {'AAPL': -1.996081}], [{'MSFT': 0.086638}, {'MSFT': -0.926081}]]
    

    至于将其转换为 DataFrame,这取决于您要如何组织数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 2021-03-29
      • 1970-01-01
      • 2021-03-07
      • 1970-01-01
      • 2019-06-09
      • 2017-01-08
      相关资源
      最近更新 更多