Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 日期时间索引-转换索引_Pandas_Date_Dataframe_Datetimeindex - Fatal编程技术网

Pandas 日期时间索引-转换索引

Pandas 日期时间索引-转换索引,pandas,date,dataframe,datetimeindex,Pandas,Date,Dataframe,Datetimeindex,因此,我正在使用Pandas进行一些技术分析,但是我在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.11

因此,我正在使用Pandas进行一些技术分析,但是我在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
我使用pandas_datareader获取雅虎财务数据,包括DateTimeIndex、开盘价、收盘价、高价、低价和成交量价格。接下来我要计算一些我想开始分析的日期。我的问题是,一旦我有了这些日期,我真的很难“访问”上一个交易日和下一个交易日对应的值。数据帧上的Shift仅对数据帧本身有效,不会移动索引。DateTimeIndex上的Shift只能以一致的频率工作

            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
例如,给定日期
2017-05-19
,我希望能够访问日期
2017-05-18
以及
2017-05-22
的行。不仅是值,因为在原始df上使用shift仍然可以很容易地找到这些值,而且我还希望获得“下一行”的datetimeindex

在此问题上的任何帮助都将不胜感激

---编辑 我有一个包含多个日期的索引“series”,我想找到该系列中每个日期的“下一行”

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__'
打开
日期
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回溯(最近一次调用上次)
在()
5打印(h)
6.
---->7打印(tmp.iloc[tmp.index.get_loc[h]]
TypeError:“instancemethod”对象没有属性“\uuu getitem\uuu”

您可以使用get\u loc和iloc

t = '2017-05-19'
req_row = df.index.get_loc(t)
现在获取数据帧的切片

df.iloc[[req_row-1, req_row,req_row+1]]
你得到

            Open        High        Low         Close       Adj_Close   Volume
Date                        
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
            Open        High        Low         Close       Adj_Close   Volume
Date                        
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
编辑: 假设你有一个系列,在tmp列表中获取索引

tmp = df.iloc[4:8].index.tolist()
现在要获取每个日期的下一行

req_rows = [df.index.get_loc(t)+1 for t in tmp]
df.iloc[req_rows]
你得到

            Open        High        Low         Close       Adj_Close   Volume
Date                        
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
            Open        High        Low         Close       Adj_Close   Volume
Date                        
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

啊,你又以5秒的优势击败了我,你的回答与我的回答完全相同。@cᴏʟᴅsᴘᴇᴇᴅ, 如果我告诉你这件事总是发生在我身上,你会感觉好点吗?:)啊,这真的帮了大忙!显然我已经有了这个,但它对我不起作用,因为我有一个具有多个日期时间的
对象,它不能将其转换为一个时间戳。如果
t
包含多个日期,您对如何为每个元素“获取下一个日期”有什么建议吗?我希望我能说是,但是…;-)@MrBobJamesBob一个重现你问题的MCVE在这里会很有帮助。