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

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

01
02
03
04
05
06
07
08
09
10
11
12
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型に変換する際にも使用する。

1
2
3
4
5
6
7
8
9
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メソッドを使うことで、書式の指定を省略することができる。

1
2
3
4
from dateutil.parser import parse
 
parse('2019-10-04')
# datetime.datetime(2019, 10, 4, 0, 0)

pandasで日付の配列を扱う

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

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

1
2
3
4
5
6
7
8
9
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')