Python: strptimeとstrftimeについて整理してみた
今回は、Python初心者が混乱しやすそうだと感じた、時間に関する以下4つの違いについて整理していこうと思います。
datetime.strptime
datetime.strftime
to_datetime
dt.strftime
datetime.strptimeとdatetime.strftimeの違いを記載したものは見かけますが、pandasのdt.strftimeを使うとSeriesデータの一括処理ができることを含めて理解しておくことが、データクレンジングなど実践の場で役立つと思ったためです。
順番にみていきましょう。
1. datetime.strptime
Python標準のdatetimeモジュールにはstrptime関数があり、文字列の日付を、指定したフォーマットでdatetimeオブジェクトに変換します。strptimeは「string parse time」の略です。
※Pandasのto_datetimeと似ていますが、こちらはPythonのdatetimeモジュールで個別の文字列を変換する場合に使います。
from datetime import datetime
# 文字列をdatetimeオブジェクトに変換
date_str = '2024-11-01'
date = datetime.strptime(date_str, '%Y-%m-%d')
print(date)
print(type(date))
出力結果
2. datetime.strftime
Python標準のdatetimeモジュールにはstrftimeメソッドがあり、Pythonのdatetimeオブジェクト(個別の日付データ)をフォーマット指定で文字列に変換できます。strftimeは「string from time」の略です。
※Pandasのdt.strftimeと目的は同じですが、こちらはPythonのdatetimeオブジェクトが使用対象となります。
from datetime import datetime
# datetimeオブジェクトを作成
date = datetime(2024, 11, 1)
# datetimeオブジェクトを指定フォーマットの文字列に変換
formatted_date = date.strftime('%Y-%m-%d')
print(formatted_date)
print(type(formatted_date))
出力結果
3. to_datetime
to_datetimeはpandasの関数で、文字列として扱われている複数の日付データを、日時型(datetime64)に一括変換することができます。これにより、日付の差分計算や時系列分析が可能になります。
例えば、YYYY-MM-DD形式の文字列の日付データを日時型(datetime64)に変換する場合、次のようにto_datetimeを使います。
import pandas as pd
# サンプルデータの作成
df = pd.DataFrame({
'date_str': ['2024-11-01', '2024-11-02', '2024-11-03', '2024-11-04', '2024-11-05']
})
# 文字列を日付型に一括変換
df['date'] = pd.to_datetime(df['date_str'])
print(df)
print(type(df['date_str'][0]))
print(type(df['date'][0]))
出力結果
4. dt.strftime
dt.strftimeのstrftimeは、pandasのSeriesオブジェクトに存在するdt属性の中のメソッドで、複数の日付データを文字列形式に一括変換できます。
例えば、YYYY-MM-DD形式の日付データをMM/DD/YYYY形式の文字列に変換したい場合、以下のようにdt.strftimeを使います。
import pandas as pd
# サンプルデータの作成
df = pd.DataFrame({
'date': pd.to_datetime(['2024-11-01', '2024-11-02', '2024-11-03', '2024-11-04', '2024-11-05'])
})
# 日付データをMM/DD/YYYY形式の文字列に一括変換
df['formatted_date'] = df['date'].dt.strftime('%m/%d/%Y')
print(df)
print(type(df['date'][0]))
print(type(df['formatted_date'][0]))
出力結果
この例のように、実務では dt.strftime と to_datetime を組み合わせて使用するケースが多いと感じます。理由としては以下の通り。
インポートデータの日付が文字列形式になっている
CSVなどのデータを読み込んだ際に、日付データが文字列形式になっていることが多いです。文字列を日時型に変換するために to_datetime を使用します。to_datetime は、異なる日付形式("YYYY-MM-DD", "MM/DD/YYYY", "Month Day, Year"など)を一括で日時型に変換可能することができるので便利です。日付データを整形して出力する必要がある
分析やレポートの際に、日時型のデータを特定のフォーマットに整形するために dt.strftime を使用します。"2024年11月"などのような日本語表記も柔軟に対応できます。
以上となります。特にデータフレームの操作が中心になる分析業務では、1つの日時データを変換するケースよりも、データフレームの列を一括変換するケースが圧倒的に多いと思います。これを機に整理しておくと、dt.strftimeをより使いこなせるのではないでしょうか。
※ この記事の一部は、ChatGPTを活用して調査した情報をもとに作成しています。ただし、掲載したコードはGoogle Colab上で実行し、出力結果を確認した上で掲載しています。読者の皆さまが再現できるよう、正確な情報提供に努めています。内容についてご指摘やお気づきの点がございましたら、ぜひコメントいただけると幸いです。