如何将API响应中特定JSON数组解析为多行多列的Pandas DataFrame?
嵌套JSON趋势数据转多行Pandas DataFrame解决方案
核心思路
问题出在对嵌套JSON的处理方式上——你不需要对整个响应做全量归一化,直接提取trend数组即可生成多行结构的DataFrame。
代码实现
1. 基础版(仅处理"heart disease")
import requests import pandas as pd # 调用API(替换为你的实际请求参数) api_url = "https://api.keywords.com/v1/get_keyword_data" params = {"api_key": "your_api_key", "keywords": "heart disease"} # 示例参数 response = requests.get(api_url, params=params) response_data = response.json() # 提取目标趋势数组 trend_list = response_data["data"]["heart disease"]["trend"] # 直接转换为DataFrame trend_df = pd.DataFrame(trend_list) # 可选:添加关键词标识列 trend_df["keyword"] = "heart disease" # 保存为CSV trend_df.to_csv("heart_disease_trend.csv", index=False)
2. 进阶版(处理多个关键词)
如果API返回多个关键词的趋势数据,可循环遍历生成合并后的DataFrame:
import requests import pandas as pd api_url = "https://api.keywords.com/v1/get_keyword_data" params = {"api_key": "your_api_key", "keywords": "heart disease,diabetes"} # 多关键词示例 response = requests.get(api_url, params=params) response_data = response.json() all_trend_dfs = [] # 遍历每个关键词的趋势数据 for keyword, keyword_data in response_data["data"].items(): df = pd.DataFrame(keyword_data["trend"]) df["keyword"] = keyword all_trend_dfs.append(df) # 合并所有数据 final_df = pd.concat(all_trend_dfs, ignore_index=True) final_df.to_csv("multi_keyword_trends.csv", index=False)
关键说明
- 之前的单行问题通常是因为误用
pd.json_normalize()处理了整个嵌套结构,而trend本身就是标准的列表型数据,直接用pd.DataFrame()转换即可生成多行多列的结构。 - 生成的DataFrame会自动将
month、year、value设为独立列,符合你的需求。
内容的提问来源于stack exchange,提问作者Doug
相关产品推荐
相关产品推荐

