Нарезка Pandas DataFrame по дням / часам / минутам

У меня есть pandas Dataframe с индексом datetime, например «ГГГГ-ММ-ДД ЧЧ: ММ: СС».

Index               Parameter
2007-05-02 14:14:08     134.8
2007-05-02 14:14:32     134.8 
2007-05-02 14:14:41     134.8 
2007-05-02 14:14:53     134.8 
2007-05-02 14:15:01     134.8 
2007-05-02 14:15:09     134.8 
......
2007-05-30 23:08:02     105.9 
2007-05-30 23:18:02     105.9 
2007-05-30 23:28:02     105.9 
2007-05-30 23:38:03     105.8 

Можно ли получить фрагмент DataFrame по году df['2007'] или по месяцу df['2007-05']?

Но когда я попытался разрезать DataFrame по дням, например df['2007-05-02'], у меня возникла ошибка:

KeyError: < Timestamp: 2007-02-05 00:00:00. 

Пользуюсь пандами версии 8.0.1. Можно ли нарезать DataFrame с меньшей частотой, чем год или месяц? Например, по дням или часам?


person Vitali Molchan    schedule 16.10.2012    source источник
comment
Интересно, что индексация по году или году-месяцу ведет себя иначе, чем по году-месяц-дню. Для года-месяца-дня учитываются только временные метки с H: M: S = 0: 0: 0. Кстати, я полагаю, вы работаете над серией, а не над DataFrame.   -  person Wouter Overmeire    schedule 16.10.2012


Ответы (1)


используйте df.ix[x:y], где x и y - объекты даты и времени.

Пример:

In [117]: frame.index.summary()
Out[117]: 'DatetimeIndex: 6312960 entries, 2000-04-05 00:01:00 to 2012-04-06 00:00:00\nFreq: T'


In [118]: x=datetime(2001, 4, 5, 0, 1)

In [119]: y=datetime(2001, 4, 5, 0, 5)

In [120]: print frame.ix[x:y]
                     radiation      tamb
2001-04-05 00:01:00  67.958873  8.077386
2001-04-05 00:02:00  50.801294  0.731453
2001-04-05 00:03:00  16.042035  6.944998
2001-04-05 00:04:00   5.678343  9.728967
2001-04-05 00:05:00  72.551601  7.652942

вы также можете сделать это:

In [121]: print frame.ix[x]
radiation    67.958873
tamb          8.077386
Name: 2001-04-05 00:01:00
person root    schedule 16.10.2012
comment
да, но можно ли это сделать, не достигнув точной индексной точки? Например. если серия начинается с 02-05-2007, 14:14:08, индексация с x = pd.Timestamp('2007-05-02 14:00:00') все равно вызывает KeyError. - person metakermit; 13.05.2014