使用Python提取多只股票未来除息日及股息金额的技术求助
解决方案
1. 修复yfinance调用逻辑
yfinance的info字段结构已更新,原直接索引exDividendDate的方式失效,可改用以下两种方式获取未来股息信息:
方式A:查询即将到来的股息日历
import yfinance as yf def fetch_dividend_details(ticker): ticker_obj = yf.Ticker(ticker) # 提取日历中的股息事件 upcoming_div = ticker_obj.calendar.get('Dividends') if upcoming_div is not None: return { 'ticker': ticker, 'ex_dividend_date': upcoming_div.name.date(), 'dividend_amount': upcoming_div.iloc[0] } # 若没有即将到来的,返回最新已宣布的股息(可能包含未来除息日) latest_div = ticker_obj.dividends.iloc[-1] if not ticker_obj.dividends.empty else None if latest_div: return { 'ticker': ticker, 'ex_dividend_date': latest_div.name.date(), 'dividend_amount': latest_div } return {'ticker': ticker, 'ex_dividend_date': None, 'dividend_amount': None} # 批量处理股票列表 stock_list = ['MSFT', 'AAPL', 'AMZN'] dividend_results = [fetch_dividend_details(s) for s in stock_list] # 格式化输出 import pandas as pd print(pd.DataFrame(dividend_results))
方式B:调用更新后的get_info方法
部分股票的除息日信息仍可通过get_info()获取:
ticker = yf.Ticker('MSFT') info = ticker.get_info() ex_date = info.get('exDividendDate') div_amount = info.get('dividendRate') # 时间戳转日期格式 if ex_date: ex_date = pd.to_datetime(ex_date, unit='s').date() print(f"MSFT: 除息日 {ex_date}, 股息金额 {div_amount}")
2. 替代数据源:Polygon Python库
若yfinance仍不稳定,可使用Polygon的API(免费额度满足个人批量查询需求):
from polygon import RESTClient def get_polygon_div_data(tickers, api_key): client = RESTClient(api_key) results = [] for ticker in tickers: # 获取即将到来的股息 div_events = list(client.list_dividends(ticker, limit=1, upcoming=True)) if div_events: event = div_events[0] results.append({ 'ticker': ticker, 'ex_dividend_date': event.ex_dividend_date.date(), 'dividend_amount': event.cash_amount }) else: results.append({'ticker': ticker, 'ex_dividend_date': None, 'dividend_amount': None}) return results # 使用示例 api_key = "你的Polygon API密钥" print(get_polygon_div_data(['MSFT', 'AAPL'], api_key))
3. 关键提示
- 免费数据源可能存在信息延迟或缺失,专业场景建议使用付费金融数据接口(如Bloomberg、FactSet)
- 批量请求时需控制频率,避免触发API限流机制
内容的提问来源于stack exchange,提问作者Lord-Goku
相关产品推荐
相关产品推荐

