如何在Pandas中规范化嵌套JSON列并合并至DataFrame?
处理JAO API嵌套数据的Pandas展开方案
第一步:修正API请求逻辑
你当前的请求代码存在小问题——requests.get中传入json=data是不必要的,应该先获取响应后解析JSON数据,再转换为DataFrame:
import pandas as pd import requests Base_URL = "https://api.jao.eu/OWSMP/getauctions" headers = { "AUTH_API_KEY": "06e690fb-697b-4ab2-9325-4268cbd14502" } params = { "horizon":"Daily", "corridor":"IF1-FR-GB", "fromdate":"2021-01-01" } # 发送请求并解析响应 r = requests.get(Base_URL, headers=headers, params=params) response_data = r.json() # 转换为DataFrame df = pd.DataFrame(response_data)
第二步:展开嵌套的results列
results列是嵌套字典列表,我们可以用pd.json_normalize配合explode来完整展开数据,同时保留原DataFrame的其他字段:
# 先将results列的列表拆分为多行(每个字典对应一行) df_exploded = df.explode('results', ignore_index=True) # 展开嵌套的字典为单独列 df_normalized = pd.json_normalize(df_exploded['results']) # 合并原DataFrame的其他列和展开后的列 final_df = pd.concat([df_exploded.drop('results', axis=1), df_normalized], axis=1)
关键逻辑说明
explode('results'):把每个行中results列的列表拆分成多行,每一行对应列表里的一个字典,同时保留原行的其他字段。pd.json_normalize():把嵌套字典直接转换成结构化的列,自动提取字典的键作为列名。pd.concat():将原DataFrame去掉results列后的数据,和展开后的结构化数据横向合并,得到完整的扁平表。
这样处理后,你就能得到每个小时数据对应一行的标准DataFrame,所有字段都展开为单独列,方便后续分析。
内容的提问来源于stack exchange,提问作者Chetan Patel
相关产品推荐
相关产品推荐

