2012-10-16 73 views
6

我有熊貓Dataframe與日期時間索引像'YYYY-MM-DD HH:MM:SS'。熊貓DataFrame切片按天/小時/分

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 

很可能獲得通過一年df['2007']或按月df['2007-05']分割一個數據幀?

但是,當我試圖通過天切片數據幀,例如df['2007-05-02'],我得到了錯誤:

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

我用熊貓8.0.1版。是否有可能以比年或月更小的頻率切片DataFrame?例如,按天還是按小時?

+1

有趣,索引由一年或年 - 月比按年 - 月 - 日不同的行爲。對於年 - 月 - 日,僅考慮H:M:S = 0:0:0的時間戳。順便說一句,我想你正在一個系列而不是數據幀。 –

回答

11

使用df.ix[x:y]其中xy是日期時間對象。

例子:

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 
+0

是的,但可以在沒有「擊中」確切索引點的情況下完成嗎?例如。如果該系列以2007-05-02 14:14:08開始,使用'x = pd.Timestamp('2007-05-02 14:00:00')進行索引'仍然會引發'KeyError'。 – metakermit

+2

啊,好吧,設法用's.between_time(x,y)'來做。 – metakermit