如何通过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
相关产品推荐
相关产品推荐

