Pythonで最も簡単にタイムスタンプ←→文字列や時差変換する方法
Posted On 2020-06-18
Pythonでタイムスタンプの文字列をパースするには「time.strftime」が紹介されることが多いですが、実はもっと簡単な方法があります。この方法では、グリニッジ標準時→東京時間のような時差変換(時差を意識したタイムスタンプへの変換)も同時に行うことができ、とても便利です。
目次
日付データは困ったちゃん
Pythonに限ったことではないですが、一般に日付データはバグの温床となりやすいです。例えば、
- タイムスタンプの文字列フォーマットがいろいろある
(Tue, 03 Jul 2018 05:40:23 +0000 や 2017-03-12T11:50:40+09:00) - 時差はどこを基準にしているのか
- もしタイムスタンプ文字列が時差のデータを持っていない場合、変換時にどの地域の時差を指定しているのか(処理環境依存で時差が振られる)
などなど、日付データは厄介な問題を抱えがちな困ったちゃんです。日付データの変換をいちいち自分で書かかずに、いい感じにやってくれるライブラリがあるととても嬉しいのです。
pandasを使う
いい感じに変換してくれるクラスは実はpandasにあります。pd.Timestampを使います。
import pandas as pd
t1 = pd.Timestamp("Tue, 03 Jul 2018 05:40:23 +0000")
t2 = pd.Timestamp("2017-03-12T11:50:40+09:00")
print(t1) # 2018-07-03 05:40:23+00:00
print(t2) # 2017-03-12 11:50:40+09:00
ワンライナーでできてとても便利。
タイムゾーン変換をしたい場合
読み込み時にタイムゾーンを変換したい場合は、「tz=」以下にタイムゾーンを指定します。t1を東京時間、t2をグリニッジ標準時に変換してみます。
import pandas as pd
t1 = pd.Timestamp("Tue, 03 Jul 2018 05:40:23 +0000", tz="Asia/Tokyo")
t2 = pd.Timestamp("2017-03-12T11:50:40+09:00", tz="GMT")
print(t1) # 2018-07-03 14:40:23+09:00
print(t2) # 2017-03-12 02:50:40+00:00
いちいち足し算引き算をする必要はありません。
文字列に戻したい場合
pd.Timestampから文字列に変換したい場合は、単にstrでキャストします。
import pandas as pd
t1 = pd.Timestamp("Tue, 03 Jul 2018 05:40:23 +0000", tz="Asia/Tokyo")
str_t1 = str(t1)
print(str_t1) # 2018-07-03 14:40:23+09:00
print(len(str_t1)) # 25 (文字数)
あまりにお手軽なので、日付処理のためだけにPandasを使うの大アリでしょう。
Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内
技術書コーナー
北海道の駅巡りコーナー