このエントリーをはてなブックマークに追加

Advent Calendar 2013 - 20

Python で解析! - Timestamp

今回は Timestamp について。 Python の datetime と同等と思われるが、 Pandas では Timestamp を使うようだ。効率がいいらしいが、詳しいことは未調査。まずは、使い方を。

1. Timestamp の生成

いつもなら、データの準備から始まるところだが、今回はなし。

早速 Timestamp を生成してみる。

import pandas as pd
import datetime
from datetime import timedelta

ts = pd.Timestamp('2013/12/4')
Timestamp('2013-12-04 00:00:00', tz=None)

外国風の書式でも OK 。

ts = pd.Timestamp('12/4/2013')
Timestamp('2013-12-04 00:00:00', tz=None)

区切りのない数字の羅列も認識する。

ts = pd.Timestamp('20131204')
Timestamp('2013-12-04 00:00:00', tz=None)

datetime からの変換も受け付けてくれる。

ts = pd.Timestamp(datetime.datetime(2013, 12, 4))
Timestamp('2013-12-04 00:00:00', tz=None)

2. タイムゾーンの設定

まずは UTC (GMT) で。

ts = pd.Timestamp('2013/12/4', tz='UTC')
Timestamp('2013-12-04 00:00:00+0000', tz='UTC')

日本時間は東京を指定する。

ts = pd.Timestamp('2013/12/4', tz='Asia/Tokyo')
Timestamp('2013-12-04 00:00:00+0900', tz='Asia/Tokyo')

3. タイムゾーンの変換

タイムゾーンを持ってるなら、当然、変換ができる。必要のない人も少なくないと思われるが、私は仕事の都合で不可避な立場にいる…。

ts = pd.Timestamp('2013/12/4', tz='UTC')
ts.tz_convert('Asia/Tokyo')
Timestamp('2013-12-04 09:00:00+0900', tz='Asia/Tokyo')

逆もしかり。

ts = pd.Timestamp('2013/12/4', tz='Asia/Tokyo')
ts.tz_convert('UTC')
Timestamp('2013-12-03 15:00:00+0000', tz='UTC')

4. Timestamp の演算

演算してみた。

pd.Timestamp('2013/12/1') - pd.Timestamp('2013/11/3')
datetime.timedelta(28)

timedelta が返ってきた。それなら 60 日前を求めるのは timedelta を使うに違いない。

pd.Timestamp('2013/12/1') - timedelta(days=60)
datetime.datetime(2013, 10, 2, 0, 0)

datetime が返ってきた。

5. その他、日付関連

datetime を継承しているのかもしれないが、datetime のメソッドは一通り持っている。

'{}/{}/{}'.format(ts.year, ts.month, ts.day)

'2013/12/4'

datetime にないものも。

'{} days {} quarter'.format(ts.dayofyear, ts.quarter)

'337 days 4 quarter'

標準の datetime や date を取得することもできる。

ts.to_datetime()
datetime.datetime(2013, 12, 4, 0, 0, tzinfo=<DstTzInfo 'Asia/Tokyo' JST+9:00:00 STD>)
ts.date()
datetime.date(2013, 12, 4)

今回はこんなところで。