pandas dataframe循环调用Foursquare接口仅返回单条结果问题求助
问题根因
你代码的问题出在Python缩进规则上:发送接口请求、打印结果的两行代码没有被包含在for循环的缩进块中,导致循环过程中只是不断覆盖url4Sqr变量的值,循环全部执行结束后才会发起一次请求、打印一次结果,自然只能拿到DataFrame最后一行数据对应的接口返回。
修正后代码
import requests import time # 提前初始化列表存储所有城镇的返回结果 all_venues = [] # 配置Foursquare参数(请提前赋值这三个变量) CLIENT_ID = "你的客户端ID" CLIENT_SECRET = "你的客户端密钥" VERSION = "20230101" # 按Foursquare要求填写版本号 LIMIT = 100 radius = 1000 for i, series in df_income_zip_good.iterrows(): lat = series['lat'] lng = series['lng'] town = series['place'] # 拼接请求url url4Sqr = 'https://api.foursquare.com/v2/venues/explore?&client_id={}&client_secret={}&v={}&ll={},{}&radius={}&limit={}'.format( CLIENT_ID, CLIENT_SECRET, VERSION, lat, lng, radius, LIMIT) try: # 发起请求、解析结果 resp = requests.get(url4Sqr, timeout=10) resp.raise_for_status() # 捕获4xx/5xx错误 result4Sqr = resp.json()["response"]['groups'][0]['items'] # 把当前城镇的结果存到总列表,可额外加上城镇名方便后续关联 all_venues.append({ "town": town, "lat": lat, "lng": lng, "venues": result4Sqr }) # 打印当前城镇的结果 print(f"{town} 场地数据获取成功,共{len(result4Sqr)}条:") print(result4Sqr) except Exception as e: print(f"{town} 数据获取失败,错误信息:{str(e)}") # 请求间隔1秒,避免触发限流 time.sleep(1) # 循环结束后可查看所有结果 print(f"全部城镇数据获取完成,共{len(all_venues)}个城镇的有效数据")
优化注意事项
- 不要在循环内直接覆盖单个结果变量,提前初始化总列表存储所有返回结果,方便后续关联原始DataFrame做分析
- 新增异常捕获逻辑,避免单条请求超时、接口报错导致整个循环终止
- 新增请求间隔,避免高频调用触发Foursquare的接口限流规则
- 请提前完成
CLIENT_ID、CLIENT_SECRET、VERSION三个变量的赋值,否则会触发变量未定义报错
内容的提问来源于stack exchange,提问作者ADH
相关产品推荐
相关产品推荐

