Python で解析 20

“Advent Calendar 2013 - Python で解析!” の二十日目。Timestamp

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

1. Timestamp の生成

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

早速 Timestamp を生成してみる。

In [1]: import pandas as pd

In [2]: import datetime

In [3]: from datetime import timedelta

In [4]: ts = pd.Timestamp('2013/12/4')

In [5]: ts
Out[5]: Timestamp('2013-12-04 00:00:00', tz=None)

外国風の書式でも OK 。

In [6]: ts = pd.Timestamp('12/4/2013')

In [7]: ts
Out[7]: Timestamp('2013-12-04 00:00:00', tz=None)

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

In [8]: ts = pd.Timestamp('20131204')

In [9]: ts
Out[9]: Timestamp('2013-12-04 00:00:00', tz=None)

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

In [10]: ts = pd.Timestamp(datetime.datetime(2013, 12, 4))

In [11]: ts
Out[11]: Timestamp('2013-12-04 00:00:00', tz=None)

2. タイムゾーンの設定

まずは UTC (GMT) で。

In [12]: ts = pd.Timestamp('2013/12/4', tz='UTC')

In [13]: ts
Out[13]: Timestamp('2013-12-04 00:00:00+0000', tz='UTC')

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

In [14]: ts = pd.Timestamp('2013/12/4', tz='Asia/Tokyo')

In [15]: ts
Out[15]: Timestamp('2013-12-04 00:00:00+0900', tz='Asia/Tokyo')

3. タイムゾーンの変換

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

In [16]: ts = pd.Timestamp('2013/12/4', tz='UTC')

In [17]: ts.tz_convert('Asia/Tokyo')
Out[17]: Timestamp('2013-12-04 09:00:00+0900', tz='Asia/Tokyo')

逆もしかり。

In [18]: ts = pd.Timestamp('2013/12/4', tz='Asia/Tokyo')

In [19]: ts.tz_convert('UTC')
Out[19]: Timestamp('2013-12-03 15:00:00+0000', tz='UTC')

4. Timestamp の演算

演算してみた。

In [20]: pd.Timestamp('2013/12/1') - pd.Timestamp('2013/11/3')
Out[20]: datetime.timedelta(28)

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

In [21]: pd.Timestamp('2013/12/1') - timedelta(days=60)
Out[21]: datetime.datetime(2013, 10, 2, 0, 0)

datetime が返ってきた。

5. その他、日付関連

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

In [22]: '{}/{}/{}'.format(ts.year, ts.month, ts.day)
Out[22]: '2013/12/4'

datetime にないものも。

In [23]: '{} days {} quarter'.format(ts.dayofyear, ts.quarter)
Out[23]: '337 days 4 quarter'

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

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

今回はこんなところで。