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

yfinance下载TSLA6个月1分钟数据返回空表,求限制规则及解决方案

yfinance获取TSLA分钟级数据的限制与解决方法

问题背景

尝试用yfinance下载特斯拉(TSLA)6个月的1分钟分辨率数据时返回空DataFrame,相关测试代码如下:

symbol_history = yf.Ticker('TSLA').history(period='1d', interval='1m') # 正常返回数据
symbol_history = yf.Ticker('TSLA').history(period='max', interval='1m') # 正常返回6天数据
symbol_history = yf.Ticker('TSLA').history(period='6mo', interval='1m') # 返回空DataFrame

核心原因:period与interval的组合限制

yfinance对period(周期)和interval(数据间隔)的组合有严格限制,这是因为其依赖的数据源本身不提供超长时间范围的高频分钟数据。其中1分钟级数据的最大可获取周期约为7天,超过这个范围调用就会返回空DataFrame。

解决方法:分批次获取并合并

要获取6个月的1分钟数据,需要将整个时间段拆分成多个7天的小周期,通过指定start和end参数分批次获取,再合并结果。

示例代码如下:

import yfinance as yf
import pandas as pd
from datetime import datetime, timedelta
import time

# 定义时间范围:过去6个月
start_date = datetime.now() - timedelta(days=180)
end_date = datetime.now()
current_date = start_date

# 初始化空DataFrame存储所有数据
all_tsla_data = pd.DataFrame()

while current_date < end_date:
    # 每个批次最多取7天数据
    batch_end = min(current_date + timedelta(days=7), end_date)
    # 获取当前批次的1分钟数据
    batch_data = yf.Ticker('TSLA').history(start=current_date, end=batch_end, interval='1m')
    # 合并到总数据中
    all_tsla_data = pd.concat([all_tsla_data, batch_data])
    # 更新当前起始日期
    current_date = batch_end
    # 加1秒延迟避免触发接口限流
    time.sleep(1)

# 去重(可选,处理批次首尾可能的重复数据)
all_tsla_data = all_tsla_data.drop_duplicates()
# 重置索引(可选)
all_tsla_data = all_tsla_data.reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 01:47:19