将 pandas_datareader df 重新索引为每季度给出随机 NaN
Reindexing pandas_datareader df into quarterly giving random NaN's
我正在尝试将 pandas_datareader 价格数据 dfs 重新采样为季度(从每月或每天),每天给我零星的 NaN(所有工具),每月给我所有的 NaN。最终目标是一个只有季度 return 的数据框。
用 yfinance 和 pdr 试过,都抛出 nans。即使是 3 个月间隔的 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(),然后用总和重新采样以添加 3 个月 returns -- 不是很准确,但是很接近了。
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
我正在尝试将 pandas_datareader 价格数据 dfs 重新采样为季度(从每月或每天),每天给我零星的 NaN(所有工具),每月给我所有的 NaN。最终目标是一个只有季度 return 的数据框。 用 yfinance 和 pdr 试过,都抛出 nans。即使是 3 个月间隔的 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(),然后用总和重新采样以添加 3 个月 returns -- 不是很准确,但是很接近了。
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