You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 07:24:00