
Advent Calendar 2013 - 21
Python で解析! - DatetimeIndex
今回は DatetimeIndex について。
1. データの生成
DatetimeIndex を生成するには、 date_range を使う。試しに DatetimeIndex を使った DataFrame を生成してみる。
import pandas as pd
df1 = pd.DataFrame({
'value': range(18),
}, index=pd.date_range('2012/9/1', '2013/8/31', freq='3W'))
value
2012-09-02 0
2012-09-23 1
2012-10-14 2
2012-11-04 3
2012-11-25 4
2012-12-16 5
2013-01-06 6
2013-01-27 7
2013-02-17 8
2013-03-10 9
2013-03-31 10
2013-04-21 11
2013-05-12 12
2013-06-02 13
2013-06-23 14
2013-07-14 15
2013-08-04 16
2013-08-25 17
2. date_range の説明
date_range だけを実行してみると、次のようになる。
pd.date_range('2012/9/1', '2013/8/31', freq='3W')
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-09-02 00:00:00, ..., 2013-08-25 00:00:00]
Length: 18, Freq: 3W-SUN, Timezone: None
DatetimeIndex が返って来る。指定するのは開始、終了、頻度で、上の例だと 2012/9/1 から 2013/8/31 までの範囲で三週間毎の Timestamp 生成を指定していることになる。 freq は省略可能。
pd.date_range('2012/9/1', '2013/8/31')
<class 'pandas.tseries.index.DatetimeIndex'>
[2012-09-01 00:00:00, ..., 2013-08-31 00:00:00]
Length: 365, Freq: D, Timezone: None
省略時は 'D' (日毎) の Timestamp が生成されることが Length が 365 になっていることから分かる。freq には週毎 'W'、時間毎 'H'、 12 時間毎 '12H' …などなど、いろいろ指定でき、月末日 'BM' なんかも便利そうだ。
タイムゾーンも指定できる。
pd.date_range('2012/9/1', '2013/8/31', tz='Asia/Tokyo')[0]
Timestamp('2012-09-01 00:00:00+0900', tz='Asia/Tokyo')
3. 便利なフィルター
DatetimeIndex を使うと、こんなことができる。
df1['2012']
value
2012-09-02 0
2012-09-23 1
2012-10-14 2
2012-11-04 3
2012-11-25 4
2012-12-16 5
最初に作った DataFrame 中から 2012 年のものだけを抽出できた。 2013 年分も同様に抽出できるし、ある月のものを抽出することも簡単だ。
df1['2013-03']
value
2013-03-10 9
2013-03-31 10
"date >= '2013/3/1' and date < '2013/4/1'" のような条件文を書かなくていいのは、なかなか便利だ。
今回はこんなところで。