Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pandas DataFrame slicing by day/hour/minute

I have pandas Dataframe with datetime index like 'YYYY-MM-DD HH:MM:SS'.

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 

It is possible to get slice a DataFrame by year df['2007'] or by month df['2007-05']?

But when I've tried to slice DataFrame by day, for example df['2007-05-02'], I've got the error:

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

I use the pandas version 8.0.1. Is it possible to slice DataFrame with smaller frequency than year or month? For example, by day or hour?

like image 924
Vitali Molchan Avatar asked Oct 16 '12 08:10

Vitali Molchan


1 Answers

use df.ix[x:y] where x and y are datetime objects.

Example:

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

you can also do this:

In [121]: print frame.ix[x]
radiation    67.958873
tamb          8.077386
Name: 2001-04-05 00:01:00
like image 162
root Avatar answered Sep 28 '22 17:09

root