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

Python循环请求NBA数据时重复返回结果问题求助

问题原因分析

你的问题核心出在这一行代码:

stats_df=[stats_df.assign(Date2=Date2) for Date2 in df.loc[ : ,"Date2"]]

当你循环遍历每个URL时,这个列表推导式会遍历整个Date2列的所有值,把当前URL对应的stats_df(单次请求返回的原始数据)复制多份(份数等于你Date2列的行数),每份分别绑定一个Date2值,然后把这些重复的DataFrame全部追加到lineup_df中。

举个实际例子:假设你的df有2行日期数据,那么每次循环一个URL时,都会生成2个内容几乎一样的stats_df(仅Date2不同),两次URL循环下来,原本应该只有2组独立数据,结果变成了2×2=4组——也就是每个原始数据被重复返回了两次。

修复方案

你需要让每个URL对应df中同一行的Date2值,而不是遍历整个Date2列。可以把循环逻辑改成同时遍历Date和Date2的配对,这样每次请求后只给当前数据添加对应的Date2:

import requests
import csv
from random import choice
import pandas as pd

url_template = "https://stats.nba.com/stats/leaguedashptstats?College=&Conference=&Country=&DateFrom={date}&DateTo={date}&Division=&DraftPick=&DraftYear=&GameScope=&Height=&LastNGames=0&LeagueID=00&Location=&Month=0&OpponentTeamID=0&Outcome=&PORound=0&PerMode=Totals&PlayerExperience=&PlayerOrTeam=Player&PlayerPosition=&PtMeasureType=SpeedDistance&Season=2017-18&SeasonSegment=&SeasonType=Regular+Season&StarterBench=&TeamID=0&VsConference=&VsDivision=&Weight="
lineup_df = pd.DataFrame()
df = pd.read_csv('NBADates.csv')

# 同时遍历Date和Date2列的配对,保证每个URL对应正确的Date2
for date, date2 in zip(df["Date"], df["Date2"]):
    url = url_template.format(date=date)
    data = requests.get(url, headers={
        'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0',})
    headers = data.json()['resultSets'][0]['headers']
    stats = data.json()['resultSets'][0]['rowSet']
    stats_df = pd.DataFrame(stats, columns=headers)
    # 仅给当前数据添加对应行的Date2值
    stats_df = stats_df.assign(Date2=date2)
    # 追加到总表
    lineup_df = lineup_df.append(stats_df, ignore_index=True)

lineup_df.to_csv("Stats.csv")

另外补充:你代码里的df.to_dict('series')这一行没有实际作用,可以直接删掉,它不会影响后续逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:43:13