所以我正在使用 Pandas 进行一些技术分析,但是我在 DateTimeIndex 上苦苦挣扎,因为很多财务数据的频率不一致。
我使用 pandas_datareader 获取包含 DateTimeIndex、Open、Close、High、Low 和 Volume 价格的 yahoo 财务数据。接下来我正在计算一些我想开始分析的日期。我的问题是,一旦有了这些日期,我就很难“访问”对应于前一个和下一个交易日的值。数据帧上的移位仅适用于数据帧本身,不会移位索引。DateTimeIndex 上的移位只能以一致的频率起作用。
Open High Low Close Adj Close Volume
Date
2017-05-11 160.330002 160.520004 157.550003 158.539993 158.539993 5677400
2017-05-12 159.110001 160.839996 158.509995 160.809998 160.809998 5092900
2017-05-15 160.250000 161.779999 159.759995 160.020004 160.020004 4972000
2017-05-16 160.500000 161.179993 159.330002 159.410004 159.410004 3464900
2017-05-17 158.089996 158.779999 153.000000 153.199997 153.199997 8184500
2017-05-18 153.610001 156.889999 153.240005 155.699997 155.699997 6802700
2017-05-19 156.149994 158.050003 155.910004 157.020004 157.020004 4091500
2017-05-22 157.860001 158.600006 156.429993 157.160004 157.160004 3744100
2017-05-23 157.750000 158.309998 156.800003 157.949997 157.949997 3370900
2017-05-24 158.350006 158.479996 157.169998 157.750000 157.750000 2970800
因此,例如,给定 Date 2017-05-19
,我希望能够访问 date2017-05-18
以及2017-05-22
. 不仅是值,因为使用原始 df 上的 shift 仍然很容易找到这些值,而且我还想获得“下一个”的 datetimeindex。
对此问题的任何帮助将不胜感激。
--- 编辑我有一个包含多个日期的索引“系列”,我想为该系列中的每个日期找到“下一行”。
tmp = data.iloc[8:15, :1]
print(tmp)
h, l = momentum_gaps(data)
print(h)
print( tmp.iloc[ tmp.index.get_loc[h] ] )
此代码产生输出
Open
Date
2017-05-23 157.750000
2017-05-24 158.350006
2017-05-25 161.000000
2017-05-26 162.839996
2017-05-30 163.600006
2017-05-31 163.610001
2017-06-01 163.520004
DatetimeIndex(['2017-05-25', '2017-07-12', '2017-07-18'], dtype='datetime64[ns]', name=u'Date', freq=None)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-159-a3f58efdc9d2> in <module>()
5 print(h)
6
----> 7 print( tmp.iloc[ tmp.index.get_loc[h] ] )
TypeError: 'instancemethod' object has no attribute '__getitem__'