2012-10-16 12 views
6

Tôi có gấu trúc Dataframe với chỉ mục ngày giờ như 'YYYY-MM-DD HH: MM: SS'.Pandas DataFrame cắt theo ngày/giờ/phút

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 

Có thể lấy slice DataFrame theo năm df['2007'] hoặc theo tháng df['2007-05']?

Nhưng khi tôi đã cố gắng để cắt DataFrame bởi ngày, ví dụ df['2007-05-02'], tôi đã có lỗi:

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

tôi sử dụng phiên bản gấu trúc 8.0.1. Có thể cắt DataFrame với tần suất nhỏ hơn năm hay tháng không? Ví dụ, theo ngày hoặc giờ?

+1

Thú vị, lập chỉ mục theo năm hoặc năm tháng có hành vi khác nhau hơn theo năm tháng ngày. Đối với ngày-tháng-ngày, chỉ có dấu thời gian có H: M: S = 0: 0: 0 được xem xét. BTW tôi cho rằng bạn đang làm việc trên một Series và không phải là một DataFrame. –

Trả lời

11

sử dụng df.ix[x:y] nơi xy là đối tượng ngày giờ.

Ví dụ:

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 

bạn cũng có thể làm điều này:

In [121]: print frame.ix[x] 
radiation 67.958873 
tamb   8.077386 
Name: 2001-04-05 00:01:00 
+0

có, nhưng nó có thể được thực hiện mà không "đánh" một điểm chỉ số chính xác? Ví dụ. nếu chuỗi bắt đầu với 2007-05-02 14:14:08, việc lập chỉ mục với 'x = pd.Timestamp ('2007-05-02 14:00:00')' vẫn tăng 'KeyError'. – metakermit

+2

Ah, OK, quản lý để làm điều đó với 's.between_time (x, y)'. – metakermit