如何将API所有响应的response属性存储至DataFrame?
问题解决:批量API响应存入DataFrame
原代码的核心问题
- 每次循环都会重置
df3,导致之前的API响应数据被覆盖,最终仅保留最后一次结果 requests.get(...).json()已经返回解析完成的JSON对象,无需再调用json.loads(),这会直接引发错误- 没有精准提取API响应中的
response子对象,而是处理了整个外层响应结构 - 循环内重复写入CSV,既低效又可能导致数据写入不完整
修正后的代码
import pandas as pd import requests # 初始化空列表,用来累加所有API返回的response对象 response_data = [] # 遍历df2的列(如果需要遍历列的具体值,改为 for x in df2['你的目标列名'].values) for x in df2: param = str(x) # 注意:需将参数拼入URL,否则API无法接收请求参数 url = f"https://api.com?param={param}" print(url) # 发送请求并直接解析JSON,无需二次解析 api_response = requests.get(url, verify=False).json() # 提取response子对象并加入列表(增加判断避免键不存在报错) if 'response' in api_response: response_data.append(api_response['response']) # 将所有收集到的response对象转为DataFrame df3 = pd.DataFrame(response_data) # 最终统一保存到CSV(index=False避免生成多余的索引列) df3.to_csv('/Users/users3/Downloads/example.csv', index=False)
关键修正说明
- 用列表
response_data累加数据:相比每次循环拼接DataFrame,列表追加的效率更高,且不会覆盖之前的数据 - 移除无效的
json.loads()调用:requests.get().json()已经完成了JSON字符串到Python对象的解析 - 精准提取
response子对象:确保最终DataFrame只包含你需要的id、idType等属性 - 统一写入CSV:避免循环内重复IO操作,提升效率同时保证数据完整性
内容的提问来源于stack exchange,提问作者Jonathan Adamson
相关产品推荐
相关产品推荐

