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

使用pandas 2.1.0调用si.tickers_sp500()仅返回短横线的问题

问题:pandas 2.1.0下yahoo-fin获取标普500成分股返回短横线

我正在开发一套交易算法,原本通过yahoo_fin的stock_info模块调用si.tickers_sp500()可以正常获取标普500成分股代码,但将pandas从1.5.3升级到2.1.0后,该接口只返回一系列短横线(如['----', '-----', ...])。

使用版本

  • yahoo-fin 0.8.9.1
  • pandas 2.1.0

代码示例

# Imports
from pandas_datareader import data as pdr
from yahoo_fin import stock_info as si
from pandas import ExcelWriter
import yfinance as yf
import pandas as pd
import datetime
import time
import matplotlib.pyplot as plt
import numpy as np
import mplfinance as mpf
yf.pdr_override()

# Variables
tickers = si.tickers_sp500()
tickers = [item.replace(".", "-") for item in tickers] # Yahoo Finance uses dashes instead of dots
index_name = '^GSPC' # S&P 500
start_date = datetime.datetime.now() - datetime.timedelta(days=365)
end_date = datetime.date.today()
exportList = pd.DataFrame(columns=['Stock', "RS_Rating", "50 Day MA", "150 Day Ma", "200 Day MA", "52 Week Low", "52 week High"])
returns_multiples = []

预期与实际结果

  • 预期结果:获取完整的标普500成分股代码列表
  • 实际结果:返回仅包含短横线的列表

解决方案

  • 降级pandas兼容旧版yahoo-fin:由于yahoo-fin 0.8.9.1未适配pandas 2.x版本,执行以下命令降级pandas到1.5.3即可恢复功能:
    pip install pandas==1.5.3
    
  • 升级yahoo-fin到最新版本:新版本的yahoo-fin可能已经修复了pandas 2.x的兼容性问题,执行升级命令:
    pip install --upgrade yahoo-fin
    
  • 改用yfinance直接获取成分股:如果不想调整现有版本依赖,可以替换获取逻辑为yfinance的原生方法,代码如下:
    import yfinance as yf
    # 获取标普500成分股数据
    sp500_components = yf.Ticker("^GSPC").components
    # 提取代码列表并替换格式
    tickers = sp500_components['Symbol'].tolist()
    tickers = [item.replace(".", "-") for item in tickers]
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 22:00:04