【发布时间】:2021-07-04 16:25:38
【问题描述】:
我有以下代码:
import requests
import json
from requests.structures import CaseInsensitiveDict
headers = CaseInsensitiveDict()
from pandas import json_normalize
import pandas as pd
headers["Accept"] = "application/json"
headers["Content-Type"] = "application/json"
headers['Authorization']= "Bearer token"
url = "https:link.com"
payload="""{
"GradeIds" : [7,8],
"ReportStartDate" : "2020-01-25T00:00:00",
"ReportEndDate" : "2020-02-27T00:00:00"
}"""
response = requests.request( 'POST',url, headers=headers, data=payload)
parsed = json.loads(response.text)
print(parsed)
len(parsed)
df = json_normalize(parsed)
但是,输出有点混乱,json_normalize 函数无法将其转换为干净的数据帧。以下是来自print(parsed) 的 API 输出示例:
[{'grade': {'id': 7, 'name': 'stuff1', 'type': 'data'}, 'endOfDayPrices': [{'reportDate': '2020-01-27T00:00:00', 'month': '2020-03-01T00:00:00', 'price': 3.9}, {'reportDate': '2020-01-28T00:00:00', 'month': '2020-03-01T00:00:00', 'price': 3.95}, {'reportDate': '2020-01-28T00:00:00', 'month': '2020-03-01T00:00:00', 'price': 1.05}, {'reportDate': '2020-01-29T00:00:00', 'month': '2020-03-01T00:00:00', 'price': 1.1}, {'reportDate': '2020-01-30T00:00:00', 'month': '2020-03-01T00:00:00', 'price': 0.85}}]
当打印 df 数据框时,我得到以下信息:
endOfDayPrices grade.id grade.name \
0 [{'reportDate': '2020-01-27T00:00:00', 'month'... 7 data
1 [{'reportDate': '2020-01-27T00:00:00', 'month'... 8 data
在检查此列表的长度时 len(parsed) 它说只有 2 个,grade 和 endofDayPrices。
有谁知道如何解压此列表并拥有如下所示的数据框:
grade reportDate price
7 2020-01-27T00:00:00 2.3
7 2020-01-28T00:00:00 3.95
,etc.
【问题讨论】:
标签: python json pandas api python-requests