如何遍历DataFrame每行将id列值作为入参循环发起API请求
逐行提取DataFrame id值循环发起API请求实现
你可以直接遍历DataFrame行数据,逐次取出id值替换请求参数后发起请求,下面是修正后的可运行代码,同时修复了你原有示例代码里的语法错误、字符串转义容易出问题的隐患:
import requests import json import time # 接口基础配置 url = "https://api-url.com/api/v1/endpoint" authtoken = "替换为你实际的鉴权token值" headers = { "authorization": authtoken, "Content-Type": "application/json" } # df为你已有的包含id、someValue列的DataFrame for _, row in df.iterrows(): # 提取当前行的id值,转为字符串匹配接口参数格式 current_id = str(row["id"]) # 动态构造请求体,用字典序列化JSON避免手动写转义符出错 payload = { "query": f"""{{ report(id:"{current_id}") {{ reportFieldA {{ name dimension }} }} }}""", "variables": {} } # 发起POST请求 resp = requests.post(url, headers=headers, data=json.dumps(payload)) # 打印当前id对应的返回结果,可根据需要改为存储结果到列表/文件 print(f"id: {current_id} 返回结果:{resp.text}") # 按需配置请求间隔,避免触发接口限流,数值可根据接口规则调整 time.sleep(1)
关键说明
- 遍历使用pandas内置的
iterrows()方法,逐行返回行索引和行数据,行索引用不到所以用_占位接收 - 不推荐手动写带大量转义符的payload字符串,先构造Python字典再用
json.dumps()转成JSON字符串的方式容错率更高,不容易出现引号、转义符写错的问题 - 如果你的id列本身就是字符串格式,可以去掉包裹id的
str()转换 - 如果接口没有限流要求,可以删掉
time.sleep(1)这行,加快请求速度 - 需要留存所有请求结果的话,可以在循环外定义一个空结果列表,每次请求拿到响应后把结果追加到列表中,循环结束后统一处理
内容的提问来源于stack exchange,提问作者partTimeDeveloper
相关产品推荐
相关产品推荐

