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

如何用yfinance获取Ibovespa每月首个交易日数据?

如何用yfinance获取Ibovespa指数每月首个交易日数据?

问题描述

我尝试用yfinance获取Ibovespa指数(代码^BVSP)每月首个交易日的调整收盘价,但使用interval='1mo'参数返回的是每月末的数据,不符合需求。

当前代码:

from pandas_datareader import data as wb
import pandas as pd
import yfinance as yf
yf.pdr_override()

wb.get_data_yahoo('^BVSP',
                 start = '2019-10-03', 
                 end = '2020-05-01',
                 interval='1mo')['Adj Close']

当前输出:

Date
2019-10-31    108233.0
2019-11-30    115645.0
2019-12-31    113761.0
2020-01-31    104172.0
2020-03-01     73020.0
2020-04-01     80506.0
Name: Adj Close, dtype: float64

期望结果(每月首个交易日数据,索引显示当月第一天):

Date
2019-10-01    108233.0
2019-11-01    115645.0
2019-12-01    113761.0
2020-01-01    104172.0
2020-03-01     73020.0
2020-04-01     80506.0
Name: Adj Close, dtype: float64

解决方案

要获取每月首个交易日的数据,不能直接用interval='1mo',需要先获取日度数据,再筛选每月的第一个交易日记录,最后调整索引格式匹配期望输出:

from pandas_datareader import data as wb
import pandas as pd
import yfinance as yf
yf.pdr_override()

# 获取指定时间段内的日度调整收盘价数据
daily_data = wb.get_data_yahoo('^BVSP', start='2019-10-01', end='2020-05-01')['Adj Close']

# 按月份分组,提取每组第一个交易日的数据(即每月首个交易日的收盘价)
monthly_first = daily_data.groupby(pd.Grouper(freq='M')).first()

# 将索引从月末日期调整为当月第一天的日期格式
monthly_first.index = monthly_first.index - pd.offsets.MonthBegin(1)

print(monthly_first)

说明

  • pd.Grouper(freq='M')会将数据按自然月分组,first()方法自动取每组的第一条数据,也就是该月实际的第一个交易日数据(自动跳过周末和节假日)
  • 调整索引的步骤是为了让输出的日期显示为当月第一天,和你期望的格式完全匹配;如果不需要修改索引,只保留前两步即可得到实际首个交易日的原始日期和对应数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:43:29