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

嵌套For循环批量获取多司机多日API数据失败求助

问题诊断与修复

核心问题分析

你的代码存在三个关键错误,导致数据不符合预期:

  • DataFrame未累积:外层循环每次都重新初始化df = pd.DataFrame(),且未将每日数据合并到总结果中,最终仅保留最后一天的20条数据。
  • API请求顺序颠倒:先执行请求再构造URL,第一次循环时url是未初始化的旧值,后续循环也会使用上一次循环最后生成的driver URL,导致请求参数错误。
  • 循环范围不足:range(0,6)仅遍历6天(索引0-5),若你需要7天数据,范围应覆盖所有calendar行。

修复后的代码

# 初始化总结果DataFrame,用来累积所有日期的司机数据
total_df = pd.DataFrame()

# 遍历calendar中所有日期,用len(calendar)确保覆盖全部行
for i in range(len(calendar)):
    date = calendar['Date'][i].date()
    startMs = calendar['startMs'][i]
    endMs = calendar['endMs'][i]
    daily_df = pd.DataFrame()
    
    for driverId in drivers['id']:
        # 先构造当前driver+日期的请求URL
        url = f'https://api.samsara.com/v1/fleet/drivers/{driverId}/safety/score?startMs={startMs}&endMs={endMs}'
        # 再发送GET请求获取数据
        response = requests.request('GET', url, headers=headers).json()
        daily_df = daily_df._append(response, ignore_index=True)
        time.sleep(1)
    
    # 给当日的司机数据添加日期标识
    daily_df['Date'] = date
    # 将当日数据合并到总结果里
    total_df = total_df._append(daily_df, ignore_index=True)

# 最终的完整数据在total_df中
print(total_df.shape)  # 正常情况下会输出(140, 列数)

关键修改说明

  1. 总数据容器初始化:在外层循环外创建total_df,避免每次循环重置数据,确保所有日期的司机数据都能被累积。
  2. 修正请求顺序:先构造包含当前日期参数和driverId的URL,再发送请求,保证每次API调用的参数都是正确的。
  3. 动态适配循环范围:用len(calendar)代替固定的range(0,6),不管calendar里有多少天数据都能完整遍历。
  4. 每日数据合并:将每日生成的daily_df追加到总结果中,避免单天数据被覆盖。

内容的提问来源于stack exchange,提问作者Kendall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 22:02:04