You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何处理yfinance中股票代码变更后的数据连续性及退市报错问题

解决yfinance 1.2.0中股票代码变更后历史数据连续性丢失的问题(以LTIMindtree为例)

问题背景

使用yfinance 1.2.0时,遇到股票代码变更后无法获取完整历史数据的问题:

  • LTIMindtree股票代码从LTIM.NS变更为LTM.NS
  • 查询新代码LTM.NSperiod="max"数据,仅返回更名日(2026年2月27日)起的52条数据,无法获取更名前的历史记录
  • 查询旧代码LTIM.NS时,返回"symbol may be delisted"错误,无法获取任何数据

复现代码

import yfinance as yf
import pandas as pd    

df_new = yf.download("LTM.NS", period="max")
print(f"New Ticker Shape: {df_new.shape}")

df_old = yf.download("LTIM.NS", start="2024-01-01", end="2026-02-01")

报错信息

[*********************100%***********************]  1 of 1 completed
New Ticker Shape: (52, 5)
$LTIM.NS: possibly delisted; no price data found  (1d 2024-01-01 -> 2026-02-01) (Yahoo error = "No data found, symbol may be delisted")
[*********************100%***********************]  1 of 1 completed

1 Failed download:
['LTIM.NS']: possibly delisted; no price data found  (1d 2024-01-01 -> 2026-02-01) (Yahoo error = "No data found, symbol may be delisted")

解决方案

方法1:手动合并新旧代码数据(需处理复权)

由于Yahoo Finance未自动关联新旧代码的历史数据,可手动下载旧代码的历史数据(限定到更名前的时间范围),再与新代码数据合并,同时确保复权基准一致。

示例代码:

import yfinance as yf
import pandas as pd

# 下载新代码数据(更名后)
df_new = yf.download("LTM.NS", period="max", auto_adjust=True)

# 下载旧代码数据(仅更名前,需确认准确的更名日期)
df_old = yf.download("LTIM.NS", start="2000-01-01", end="2026-02-26", auto_adjust=True)

# 合并数据并按日期排序
df_combined = pd.concat([df_old, df_new]).sort_index()

# 检查合并后的数据规模
print(f"Combined Data Shape: {df_combined.shape}")

方法2:使用Ticker对象的history()方法尝试获取完整数据

部分场景下,yfinance的Ticker对象history()方法可能能获取到关联的完整历史数据,可替代download()函数尝试:

import yfinance as yf

ltm_ticker = yf.Ticker("LTM.NS")
df_full = ltm_ticker.history(period="max", auto_adjust=True)

print(f"Full Data Shape: {df_full.shape}")

注意事项

  • 确认更名日期的准确性:需通过财经渠道核实LTIMindtree的代码变更时间,确保旧代码的查询时间范围不包含更名后的日期
  • 强制复权处理:务必开启auto_adjust=True参数,保证新旧数据的价格基准统一,避免合并后数据失真

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

火山引擎 最新活动