Pythonのdatetime.strptimeが遅い

結論
strptimeを使わずに、datetimeのコンストラクタを利用すれば早い。
str_datetime = "2022-01-01 00:00:00"
datetime.datetime( year=int(str_datetime[0:4]), month=int(str_datetime[5:7]), day=int(str_datetime[8:10]), hour=int(str_datetime[11:13]), minute=int(str_datetime[14:16]), second=int(str_datetime[17:19]),)経緯
機械学習で100万件のレコードを触っている時に、前処理の時間が長かったので計測してみた。色々問題点があったが、日付変換の処理で大きく時間がかかっていた。調べるとstrptimeを利用しないようにすれば良いとあったので実験してみた。
# strptimeを利用するimport datetimeimport time
str_datetime = "2022-01-01 00:00:00"N = 100000start_time = time.perf_counter()
for _ in range(N): datetime.datetime.strptime(str_datetime, "%Y-%m-%d %H:%M:%S")
end_time = time.perf_counter()print(end_time - start_time)
# 1.6777638220000881# strptimeを利用しないimport datetimeimport time
str_datetime = "2022-01-01 00:00:00"N = 100000start_time = time.perf_counter()
for _ in range(N): datetime.datetime( year=int(str_datetime[0:4]), month=int(str_datetime[5:7]), day=int(str_datetime[8:10]), hour=int(str_datetime[11:13]), minute=int(str_datetime[14:16]), second=int(str_datetime[17:19]), )
end_time = time.perf_counter()print(end_time - start_time)
# 0.2837805259999868処理時間が1/6ぐらいになった。
まとめ
strptimeは正規表現的な処理があるか知らないが、近いようなことをしていると思うので、遅いのは当然のような気がする。大量のデータを処理する際には有効な技だと思うので覚えておきたい。
スポンサーリンク
スポンサーリンク





