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. タイムゾーンの設定
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)
今回はこんなところで。