見出し画像

Python: strptimeとstrftimeについて整理してみた

今回は、Python初心者が混乱しやすそうだと感じた、時間に関する以下4つの違いについて整理していこうと思います。

  1. datetime.strptime

  2. datetime.strftime

  3. to_datetime

  4. 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上で実行し、出力結果を確認した上で掲載しています。読者の皆さまが再現できるよう、正確な情報提供に努めています。内容についてご指摘やお気づきの点がございましたら、ぜひコメントいただけると幸いです。

いいなと思ったら応援しよう!