将json查询结果加载到数据框
Posted
技术标签:
【中文标题】将json查询结果加载到数据框【英文标题】:load json query result to dataframe 【发布时间】:2021-12-18 23:14:37 【问题描述】:完成 'load_query_result_to_df' 函数以从 以前的 'get_res_for_API_query' 到数据框。 如上所述,使用 api_query_res.json() 获取字典(表示 json)。
def get_res_for_API_query(included_field_value_pairs, excluded_field_value_pairs):
u="http://moocdsand.ml:8080/api/records/1.0/search?dataset=chocolate-bars"
if excluded_field_value_pairs:
for key, value in excluded_field_value_pairs:
u+="&exclude." + key + "=" + value
if included_field_value_pairs:
for key in range(0 , len(included_field_value_pairs)):
u+= "&refine." + included_field_value_pairs[key][0] + "=" + included_field_value_pairs[key][1]
response = requests.get(u)
return response
不起作用的功能:
def load_query_result_to_df(api_query_res):
df = pd.DataFrame.from_dict(api_query_res.json(), orient='index')
return df
我得到这个错误:
KeyError: 'cocoa_percent' AssertionError:查询的结果数错误
【问题讨论】:
【参考方案1】:您可以尝试一些更简单的方法,例如:
df = pd.json_normalize(results, record_path = ['results'])
这将展平结果并生成一个名为 df 的新数据框。
将数据导入数据框后,处理数据可能会更容易。
【讨论】:
def load_query_result_to_df(api_query_res): results=None #names=["compony","name","review_date","cocoa_percent","company_location","rating","broad_bean_origin","bean_type"] r=api_query_res.json() for i in range(len(r["records"])): row=pd.json_normalize(r["fields"][i]) if results is None: results= row else: results.append(row) df = pd.json_normalize(results, record_path = ['records']) return df
"nhits": 2, "parameters": "dataset": "chocolate-bars", "refine": "company": "Acalli", "timezone": "UTC ", "rows": 10, "format": "json", "records": ["datasetid": "chocolate-bars", "recordid": "8f51...b42c", "fields": “评分”:3.75,“review_date”:“2015”,“名称”:“Tumbes,Norandino”,“cocoa_percent”:70,“公司”:“Acalli”,“bean_type”:“Criollo”,“company_location”: “美国”,“broad_bean_origin”:“秘鲁”,“ref”:“1470”,“record_timestamp”:“2016-12-20T16:57:04.946000+00:00”,“datasetid”:“chocolate-酒吧”,“recordid”:“685b...81d8”,“字段”:“评级”:3.75,“review_date”:“2015”,...
我需要获取字段以上是关于将json查询结果加载到数据框的主要内容,如果未能解决你的问题,请参考以下文章
将 BQ 查询结果下载到 Python 数据框时出现 504 Deadline Exceeded 错误
Apache Spark - 将 UDF 的结果分配给多个数据框列