如何用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
相关产品推荐
相关产品推荐

