datetimeオブジェクトを文字列に変換する

Pythonのdatetimeオブジェクトは、strやstrftimeメソッドを使うことで、任意の書式の文字列に変換することができる。

from datetime import datetime

ts = datetime(2019, 10, 4)

str(ts)
# '2019-10-04 00:00:00'

ts.strftime('%Y-%m-%d')
# '2019-10-04'

ts.strftime('%D')
# '10/04/19'

文字列をdatetimeオブジェクトに変換する

「%Y(4桁の年)」、「%m(2桁の月)」など、様々な書式が用意されているが、これらの書式はstrptimeメソッドを使って文字列をdate型に変換する際にも使用する。

val = '2019-10-04'

datetime.strptime(val, '%Y-%m-%d')
# datetime.datetime(2019, 10, 4, 0, 0)

vals = ['10/3/2019', '10/4/2019']
[datetime.strptime(x, '%m/%d/%Y') for x in vals]
# [datetime.datetime(2019, 10, 3, 0, 0),
#  datetime.datetime(2019, 10, 4, 0, 0)]

strptimeメソッドは特定の書式で日付を変換するのに適したメソッドだ。

ただ、毎回書式を指定するのは面倒くさい。

そういった場合は、dateutilパッケージのparser.parseメソッドを使うことで、書式の指定を省略することができる。

from dateutil.parser import parse

parse('2019-10-04')
# datetime.datetime(2019, 10, 4, 0, 0)

pandasで日付の配列を扱う

pandasでは、データフレームのインデックスや列にある日付の配列を扱うことができる。

pandasのto_datetimeメソッドを使って、文字列のリストを、日付型のリストに変換する例を紹介しておく。

import pandas as pd

strs = ['2019-10-03 12:00:00', '2019-10-04 13:00:00']

date_strs = pd.to_datetime(strs)
# DatetimeIndex(['2019-10-03 12:00:00', '2019-10-04 13:00:00'], dtype='datetime64[ns]', freq=None)

date_strs[1]
# Timestamp('2019-10-04 13:00:00')