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

如何遍历Alpha Vantage接口slice参数拉取多期分钟数据并存入DataFrame

问题原因
  • 变量覆盖逻辑错误:你最初将df定义为存储数据的空列表,但循环内直接将pd.read_csv()返回的单月DataFrame赋值给df,直接覆盖了原来的列表对象,每次循环都会清空之前存储的所有数据,最终只会保留最后一次请求成功的结果。你后续调用的df.append(period)是在给单月DataFrame追加行,而非把单月数据存入总列表,完全不符合预期逻辑。
  • 请求频率未做限制:Alpha Vantage接口对普通用户有每分钟最多5次请求的频率限制,未做间隔的连续循环会触发限流,导致中间请求被拦截返回错误数据,这也是你只能拿到部分月份数据的核心原因之一。
  • 变量名不一致:代码开头定义的标的变量为symbol,但请求链接中使用的是ticker,若你没有在其他位置提前定义ticker会直接触发变量未定义报错。
修正后代码
import pandas as pd
import time

# 配置参数
apiKey = "替换为你自己的API密钥"
symbol = 'pltr'
periods=['year1month1','year1month2','year1month3','year1month4','year1month5',
'year1month6','year1month7','year1month8','year1month9','year1month10',
'year1month11','year1month12','year2month1','year2month2','year2month3',
'year2month4','year2month5','year2month6','year2month7','year2month8',
'year2month9','year2month10','year2month11','year2month12']

# 存储所有单月数据的列表
df_list = []

for period in periods:
    # 拼接请求链接
    url = f'https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY_EXTENDED&symbol={symbol}&interval=15min&slice={period}&apikey={apiKey}&datatype=csv&outputsize=full'
    try:
        # 请求单月数据
        month_df = pd.read_csv(url)
        # 可选:新增字段标识数据所属周期
        month_df['period'] = period
        df_list.append(month_df)
        print(f"{period} 数据拉取成功,共{len(month_df)}条")
    except Exception as e:
        print(f"{period} 数据拉取失败,错误信息:{e}")
    # 加13秒间隔,确保每分钟请求不超过5次
    time.sleep(13)

# 合并所有数据为一个DataFrame
full_df = pd.concat(df_list, ignore_index=True)

# 输出结果
print(full_df)
注意事项
  • 若你需要拉取全部24个月的数据,全程需要大概5分钟左右的时间,请耐心等待不要中断运行。
  • 若拉取过程中出现失败,可以手动调整sleep的秒数,或者针对失败的周期单独重新拉取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:54:04