如何使用Python获取特定日期时间索引后最近的单行

如何使用Python获取特定日期时间索引后最近的单行,python,pandas,Python,Pandas,我拥有的数据帧: A B C 2012-01-01 1 2 3 2012-01-05 4 5 6 2012-01-10 7 8 9 2012-01-15 10 11 12 我现在使用的是: date_after = dt.datetime( 2012, 1, 7 ) frame.ix[date_after:].ix[0:1] Out[1]: A B C 2012-01-10 7 8

我拥有的数据帧:

            A   B   C 
2012-01-01  1   2   3 
2012-01-05  4   5   6 
2012-01-10  7   8   9 
2012-01-15  10  11  12 
我现在使用的是:

date_after = dt.datetime( 2012, 1, 7 )
frame.ix[date_after:].ix[0:1]
Out[1]: 
            A  B  C
2012-01-10  7  8  9
有没有更好的办法?我不喜欢这样,我必须指定.ix[0:1]而不是.ix[0],但如果不指定,则输出将更改为TimeSeries,而不是数据帧中的一行。我发现在原始数据帧的基础上使用旋转的时间序列更难

没有
.ix[0:1]

frame.ix[date_after:].ix[0]
Out[1]: 
A    7
B    8
C    9
Name: 2012-01-10 00:00:00
谢谢


John

您可能希望直接执行索引:

i = frame.index.searchsorted(date)
frame.ix[frame.index[i]]

有点冗长,但你可以把它放在函数中。几乎和你能得到的一样好(
O(logn)

忍不住回答了这个问题,即使这个问题是在2012年由韦斯本人提出并回答的。是的,只需使用truncate

df.truncate(before='2012-01-07')

我忍不住回答了这个问题,尽管这个问题在2012年由韦斯本人提出,并在2015年由ajsp再次提出和回答。是的,除了“truncate”,您还可以与选项“nearst”一起使用

df.iloc[df.index.get_loc(datetime.datetime(2016,02,02),method='nearest')]

这就是我想要的答案。但看起来“最近的”可能返回前一行。“回填”似乎是后面最接近的。你这个厚颜无耻的猴子。@Pablojim: