将 pandas_datareader df 重新索引为每季度给出随机 NaN

扎克·奥克斯

我正在尝试将 pandas_datareader 价格数据 dfs 重新采样为季度(从每月或每天),每天给我零星的 NaN(跨所有工具),而每月给我所有的 NaN。最终目标是一个只有季度回报的数据框。用 yfinance 和 pdr 尝试过,都抛出了 nans。即使是 3mo 间隔的 YF 也会给我所有其他 NaN——我在这里错过了什么?

#sp = yf.download("SPY", start='2017-01-01', end="2020-01-30",interval='3mo').drop(columns=['Open','High','Low','Close','Volume'])
sp = pdr.DataReader('SPY','yahoo',start='2017-01-01').drop(columns=['Open','High','Low','Close','Volume'])
#Get slightly different NaNs, but NaNs with both datasets.

sp.reset_index(inplace=True)
sp = sp.set_index('Date').asfreq('q').reset_index()
#sp['Adj Close'].pct_change() #Gives me NaNs on same the Adj Close rows regardless of calc
sp


#To show that data is in tact, this operation is flawed somehow.
spy_base = pdr.DataReader('SPY','yahoo','2017-01-01')
spy_base.loc[spy_base['Date'].dt.strftime('%Y-%m-%d').str.startswith('2018')]

#OR simply
s = pdr.DataReader('SPY','yahoo','2018-01-01','2019-01-01')

在此处输入图片说明

扎克·奥克斯

向我指出的问题是这些值丢失(可能是周末),解决的简单方法是转换为 pct_change(),然后用 sum 重新采样以添加 3 个月的回报——它并不完全准确,但它是八九不离十。

spy = pdr.DataReader('SPY','yahoo','2017').drop(columns=.   ['Open','High','Low','Close','Volume'])
spy = spy.pct_change()
print(spy.head())
spy.reset_index(inplace=True)
spy_res = spy.set_index('Date').resample('Q').sum()
spy = spy.set_index('Date').asfreq('q').reset_index().ffill(axis=0)
spy

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章