考虑假期和周末的重新采样 DataFrame
Resampling DataFrame accounting for holidays and weekends
我刚开始玩 Python 和 Pandas,到目前为止总共投入了大约 10 个小时。我有一个每日库存数据的数据框,并且每周对其进行重新采样。问题在于星期五是假期的几周,我的数据集中得到 NaN 。有没有办法适应这种情况? (同样的问题,当我每月重新采样时,最后一天是周末)。
sample = 'W-FRI'
for i in range(tickerCount):
datalist.append(yf.download(stock_list[i], start, end))
datalist[i]['High'] = datalist[i]['High'].resample(sample).max()
datalist[i]['Low'] = datalist[i]['Low'].resample(sample).min()
datalist[i]['Open'] = datalist[i]['Open'].resample(sample).first()
datalist[i]['Close'] = datalist[i]['Close'].resample(sample).last()
datalist[i] = datalist[i].asfreq(sample, method='pad')
如您所见,未能正确采样耶稣受难日这一周。我知道可以从数据框中删除这些:
datalist[i] = datalist[i][datalist[i]['High'].notna()]
但理想情况下,我想获取指定重采样期间的最后一天的数据(在这种情况下,使用星期四的数据。我看过 答案
有办法做到这一点吗?
编辑:
@ElliottCollins 有一个想法,使用 .ffill() 用之前的数据(从周四开始)回填周五。这也会在每个星期六和星期日用以前的数据回填。不幸的是,当我这样做然后重新采样 W-FRI 时,我的 Open 值不正确;他们成为上周五的开盘而不是周一的开盘
编辑 2
我刚刚意识到,如果我在这一切之后再次设置索引,我就可以根据需要重新采样。我将post下面的解决方案
感谢@ElliottCollins 关于回填数据的提示。
datalist[i] = datalist[i].ffill()
这也会回填周末,这是我不想要的。所以我需要从索引
创建一个列
datalist[i] = datalist[i].reset_index()
然后删除周末
datalist[i] = datalist[i][datalist[i]['Date'].dt.dayofweek < 5]
我需要将日期列重置为稍后转换的索引,所以
datalist[i] = datalist[i].set_index('Date')
而且我能够有效地获取我需要的数据
我刚开始玩 Python 和 Pandas,到目前为止总共投入了大约 10 个小时。我有一个每日库存数据的数据框,并且每周对其进行重新采样。问题在于星期五是假期的几周,我的数据集中得到 NaN 。有没有办法适应这种情况? (同样的问题,当我每月重新采样时,最后一天是周末)。
sample = 'W-FRI'
for i in range(tickerCount):
datalist.append(yf.download(stock_list[i], start, end))
datalist[i]['High'] = datalist[i]['High'].resample(sample).max()
datalist[i]['Low'] = datalist[i]['Low'].resample(sample).min()
datalist[i]['Open'] = datalist[i]['Open'].resample(sample).first()
datalist[i]['Close'] = datalist[i]['Close'].resample(sample).last()
datalist[i] = datalist[i].asfreq(sample, method='pad')
如您所见,未能正确采样耶稣受难日这一周。我知道可以从数据框中删除这些:
datalist[i] = datalist[i][datalist[i]['High'].notna()]
但理想情况下,我想获取指定重采样期间的最后一天的数据(在这种情况下,使用星期四的数据。我看过
有办法做到这一点吗?
编辑:
@ElliottCollins 有一个想法,使用 .ffill() 用之前的数据(从周四开始)回填周五。这也会在每个星期六和星期日用以前的数据回填。不幸的是,当我这样做然后重新采样 W-FRI 时,我的 Open 值不正确;他们成为上周五的开盘而不是周一的开盘
编辑 2
我刚刚意识到,如果我在这一切之后再次设置索引,我就可以根据需要重新采样。我将post下面的解决方案
感谢@ElliottCollins 关于回填数据的提示。
datalist[i] = datalist[i].ffill()
这也会回填周末,这是我不想要的。所以我需要从索引
创建一个列datalist[i] = datalist[i].reset_index()
然后删除周末
datalist[i] = datalist[i][datalist[i]['Date'].dt.dayofweek < 5]
我需要将日期列重置为稍后转换的索引,所以
datalist[i] = datalist[i].set_index('Date')
而且我能够有效地获取我需要的数据