Python 如果所需的日期时间索引不存在,则获取下一个可用的日期时间索引

Python 如果所需的日期时间索引不存在,则获取下一个可用的日期时间索引,python,pandas,dataframe,indexing,Python,Pandas,Dataframe,Indexing,所以我有一个数据帧,f,每周索引: Open High Low Close Volume Date 2017-07-24 5.05 5.120 5.010 5.19 16306737.0 2017-07-31 5.31 5.475 5.280 5.24 45182199.0 2017-08-07 5.69 5.740 5.640 5.67 10167161.0 2017-08-14 5.65 5.6

所以我有一个数据帧,f,每周索引:

            Open   High    Low  Close      Volume
Date    


2017-07-24  5.05  5.120  5.010   5.19  16306737.0
2017-07-31  5.31  5.475  5.280   5.24  45182199.0
2017-08-07  5.69  5.740  5.640   5.67  10167161.0
2017-08-14  5.65  5.680  5.440   5.76  28296416.0
2017-08-21  5.49  5.605  5.480   5.55  16126060.0
2017-08-28  6.00  6.030  5.940   5.95  19398271.0
2017-09-04  5.86  5.965  5.845   6.01  20218389.0
2017-09-11  5.98  6.030  5.830   5.98  15812289.0
2017-09-18  5.71  5.770  5.540   5.81  30786508.0
2017-09-25  5.16  5.190  5.090   5.17  13641128.0
我想将datetime对象解析为它,如果该datetime对象存在于索引中,那么我将使用该行中的数据,否则,如果它不存在于索引中,那么抓取解析的日期之后的下一行

例如:如果我解析f.loc[datetime.datetime2017,09,07] 那它就不在索引中了,所以我想让它抓住那一行

2017-09-11 5.98 6.030 5.830 5.98 15812289.0


因为那是9月7日之后的下一个索引日期

一个简单的解决方案是使用np.searchsorted:

细节


如果是在最后一个之后呢;很好的回答btw@piRSquared我没有想到……我不知道该如何处理这个问题,这是一个很好的观点,但幸运的是,我永远不会在最后一个问题之后。我知道会有一个简单的解决方案,谢谢@cᴏʟᴅsᴘᴇᴇᴅ
df.iloc[[np.searchsorted(df.index, '2017-09-07')]]  

            Open  High   Low  Close      Volume
Date                                           
2017-09-11  5.98  6.03  5.83   5.98  15812289.0
df

            Open   High    Low  Close      Volume
Date                                             
2017-07-24  5.05  5.120  5.010   5.19  16306737.0
2017-07-31  5.31  5.475  5.280   5.24  45182199.0
2017-08-07  5.69  5.740  5.640   5.67  10167161.0
2017-08-14  5.65  5.680  5.440   5.76  28296416.0
2017-08-21  5.49  5.605  5.480   5.55  16126060.0
2017-08-28  6.00  6.030  5.940   5.95  19398271.0
2017-09-04  5.86  5.965  5.845   6.01  20218389.0
2017-09-11  5.98  6.030  5.830   5.98  15812289.0
2017-09-18  5.71  5.770  5.540   5.81  30786508.0
2017-09-25  5.16  5.190  5.090   5.17  13641128.0

df.index.dtype
dtype('<M8[ns]')