Data Analysis

Pandas DateTime列から効率的に年と月を抽出する

Spread the love

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型であることを常に確認してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です