2012-10-16 6 views
6

私は、 'YYYY-MM-DD HH:MM:SS'のようなdatetimeインデックスを持つpandas 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日か1時間か?

+1

興味深い、年または年、月ごとのインデックスは年 - 月 - 日によっては異なる挙動を示します。年 - 月 - 日では、H:M:S = 0:0:0のタイムスタンプのみが考慮されます。ところで、私はあなたがDataFrameではなくSeriesで作業しているとします。 –

答えて

11

を使用してください。df.ix[x:y]xyはdatetimeオブジェクトです。

例:あなたもこれを行うことができます

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

ああ、OK、 's.between_time(x、y)'でそれをすることができました。 – metakermit

関連する問題