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

如何通过for循环拉取Alpha Vantage两年扩展日内数据存入DataFrame

完整实现代码

import csv
import time
import requests
import pandas as pd 

# 配置参数
api_key = "你的Alpha Vantage密钥"
symbol = 'tsla'
interval = '1min'
# 存储所有切片数据的列表
df_list = []

# 生成24个slice的命名列表
slice_list = []
for year in [1,2]:
    for month in range(1,13):
        slice_list.append(f"year{year}month{month}")

with requests.Session() as s:
    for idx, slice_name in enumerate(slice_list):
        # 构造当前切片的请求URL
        CSV_URL = f'https://www.alphavantage.co/query?function=TIME_SERIES_INTRADAY_EXTENDED&symbol={symbol}&interval={interval}&slice={slice_name}&apikey={api_key}' 
        # 发起请求
        download = s.get(CSV_URL)
        decoded_content = download.content.decode('utf-8')
        cr = csv.reader(decoded_content.splitlines(), delimiter=',')
        my_list = list(cr)  
        # 处理数据:第一个切片保留表头,后续切片跳过表头避免重复
        if idx == 0:
            df = pd.DataFrame(my_list[1:], columns=my_list[0])
        else:
            df = pd.DataFrame(my_list[1:], columns=df_list[0].columns)
        df_list.append(df)
        # 免费版Alpha Vantage限制每分钟最多5次请求,此处加12秒延迟避免触发限流,付费版可删除此行
        time.sleep(12)

# 拼接所有切片数据,重置索引
full_df = pd.concat(df_list, ignore_index=True)
print(full_df)

关键逻辑说明

  • 首先通过双层循环生成符合命名规则的24个slice参数列表,覆盖2年所有时间切片
  • 用列表存储每个切片返回的DataFrame,最后一次性拼接,避免频繁合并的性能损耗
  • 仅第一个切片保留表头行,后续切片直接复用已有的列名,避免拼接后出现重复表头行
  • 新增延迟逻辑适配Alpha Vantage免费版的接口频率限制,若使用付费版可删除time.sleep(12)行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:36:03