【发布时间】:2020-10-18 21:12:39
【问题描述】:
我刚刚开始玩 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()]
但理想情况下,我想获取指定重新采样期间的最后一天数据(在这种情况下,使用周四的数据。我查看了 this 答案
有没有办法做到这一点?
编辑:
@ElliottCollins 想到了使用 .ffill() 用之前的数据(从星期四开始)回填星期五。这也会在每周六和周日回填之前的数据。不幸的是,当我这样做然后重新采样 W-FRI 时,我的 Open 值不正确;它们变为上周五的开放,而不是周一的开放
编辑 2
我刚刚意识到,如果我在这一切之后再次设置索引,我可以根据需要重新采样。我将在下面发布解决方案
【问题讨论】:
-
Fwiw,删除这些缺失值的更自然的方法是
datalist=datalist.dropna() -
您想将数据集中星期五的值设置为与星期四的值相同吗?如果是这样,您可以使用
.ffill()用最新的非缺失值填充缺失值。 IE。datalist = datalist.ffill(). -
@ElliottCollins 好主意,但不幸的是行不通。这用周五的值回填周日。当我重新采样 W-FRI 时,我的意图是获得 M-F,但我现在获得了 S-F。但由于星期天有星期五的数据,它实际上给了我 F-F ,这使得计算更加混乱。我已经尝试过第一次重新索引,因此我可以删除周末数据,但是我无法重新采样,因为我无法重新采样 Int64Index。不幸回到绘图板
-
实际上我可以在此之后重置索引,然后根据需要重新采样,所以这确实有效
标签: python-3.x pandas dataframe resampling