Pandasのdatetime列から年と月を抽出することはよくある作業です。この記事では3つの効率的な方法を解説し、それぞれの長所と短所を比較することで、ニーズに最適な方法を選択できるよう支援します。
目次
.dt
アクセサの使用
.dt
アクセサは、datetimeコンポーネントを抽出するための簡単で効率的な方法を提供します。可読性と簡潔さから、多くの場合、推奨される方法です。
import pandas as pd
data = {'date': pd.to_datetime(['2024-03-15', '2023-11-20', '2024-05-10'])}
df = pd.DataFrame(data)
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
print(df)
このコードは以下を出力します。
date year month
0 2024-03-15 2024 3
1 2023-11-20 2023 11
2 2024-05-10 2024 5
strftime()
メソッドの利用
strftime()
メソッドは、出力形式をカスタマイズできる柔軟性を提供します。これは、レポート作成やその他の目的で年と月の特定の文字列表現が必要な場合に特に便利です。
import pandas as pd
data = {'date': pd.to_datetime(['2024-03-15', '2023-11-20', '2024-05-10'])}
df = pd.DataFrame(data)
df['year'] = df['date'].dt.strftime('%Y')
df['month'] = df['date'].dt.strftime('%m') # '%b'は略称月名、'%B'は正式名称に使用
print(df)
これは以下を生成します。
date year month
0 2024-03-15 2024 03
1 2023-11-20 2023 11
2 2024-05-10 2024 05
フォーマットコードの完全なリストについては、Pythonのstrftime()
ドキュメントを参照してください。
DatetimeIndex
による直接アクセス
‘date’列が既にDatetimeIndex
である場合、年と月の属性に直接アクセスできます。それほど一般的ではありませんが、データが既にこの形式である場合は効率的です。
import pandas as pd
data = {'date': pd.to_datetime(['2024-03-15', '2023-11-20', '2024-05-10'])}
df = pd.DataFrame(data)
date_index = pd.DatetimeIndex(df['date'])
df['year'] = date_index.year
df['month'] = date_index.month
print(df)
これは最初の例と同じ出力を生成します。ただし、DatetimeIndex
オブジェクトを既に使用している場合を除き、この方法は一般的にあまり推奨されません。
結論:ほとんどのシナリオでは、.dt
アクセサが最も簡潔で効率的なアプローチです。strftime()
はより高度なフォーマット制御を提供し、DatetimeIndex
への直接アクセスは状況に応じて便利です。ニーズとコーディングスタイルに最適な方法を選択してください。必要に応じてpd.to_datetime()
を使用して、’date’列がdatetime型であることを常に確認してください。