Pandas Series の `dt.day_name` メソッド: 詳細解説とサンプルコード集
使用方法
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18'])
series = pd.Series(dates)
# 曜日名の取得
day_names = series.dt.day_name()
print(day_names)
出力結果
0 月曜日
1 火曜日
2 水曜日
Name: 0, dtype: object
オプション
locale
パラメータを指定することで、曜日名の表示言語を変更することができます。例えば、英語表記にする場合は以下のようになります。
day_names = series.dt.day_name(locale='en_US')
print(day_names)
出力結果
0 Monday
1 Tuesday
2 Wednesday
Name: 0, dtype: object
dt.day_name
メソッドは、Series
オブジェクトに格納されたデータがdatetime
型である場合のみ使用できます。
例
pandas.Series.dt.day_name
メソッドは、様々な場面で活用することができます。例えば、以下のような用途が考えられます。
- 曜日ごとの売上推移をグラフで表現する
- データ分析における曜日ごとの傾向を分析する
- カレンダーを作成する
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18', '2024-06-19', '2024-06-20'])
series = pd.Series(dates)
# 月曜日と火曜日のデータのみを抽出
mondays_tuesdays = series[series.dt.day_name().isin(['月曜日', '火曜日'])]
print(mondays_tuesdays)
出力結果
0 2024-06-16
1 2024-06-17
Name: 0, 1, dtype: datetime64[ns]
曜日のカウント
dt.day_name
メソッドと value_counts()
メソッドを組み合わせて、曜日ごとのデータ件数をカウントすることができます。例えば、以下のコードは、Series
オブジェクトに格納された日付情報の中で、各曜日のデータ件数をカウントします。
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18', '2024-06-19', '2024-06-20'])
series = pd.Series(dates)
# 曜日のカウント
day_counts = series.dt.day_name().value_counts()
print(day_counts)
出力結果
月曜日 1
火曜日 1
水曜日 1
木曜日 1
金曜日 1
dtype: int64
曜日を列に格納
dt.day_name
メソッドと Series.assign()
メソッドを組み合わせて、Series
オブジェクトに曜日名の列を追加することができます。例えば、以下のコードは、Series
オブジェクトに格納された日付情報と、対応する曜日名をそれぞれ列に格納します。
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18', '2024-06-19', '2024-06-20'])
series = pd.Series(dates)
# 曜日名の列を追加
series_with_day_name = series.assign(day_name=series.dt.day_name())
print(series_with_day_name)
出力結果
0 day_name
0 2024-06-16 月曜日
1 2024-06-17 火曜日
2 2024-06-18 水曜日
3 2024-06-19 木曜日
4 2024-06-20 金曜日
dtype: object
特定の曜日のデータフレームへの変換
dt.day_name
メソッドと条件式、DataFrame.groupby()
メソッドを組み合わせて、特定の曜日のデータのみを含むデータフレームを作成することができます。例えば、以下のコードは、Series
オブジェクトに格納された日付情報の中から月曜日と火曜日のデータのみを含むデータフレームを作成します。
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18', '2024-06-19', '2024-06-20'])
series = pd.Series(dates)
# 月曜日と火曜日のデータのみを含むデータフレームを作成
mondays_tuesdays_df = series[series.dt.
weekday 属性と strftime フォーマット
weekday
属性と strftime
フォーマットを組み合わせて、曜日名を抽出することができます。この方法は、比較的シンプルで分かりやすいコードを書くことができます。
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18'])
series = pd.Series(dates)
# 曜日名の抽出
day_names = series.dt.weekday.map({0: '月曜日', 1: '火曜日', 2: '水曜日', 3: '木曜日', 4: '金曜日', 5: '土曜日', 6: '日曜日'})
print(day_names)
出力結果
0 月曜日
1 火曜日
2 水曜日
Name: 0, dtype: object
利点
- 高速に処理できる
- シンプルで分かりやすいコード
欠点
- 複雑なフォーマット指定には
strftime
関数がやや難解
isocalendar() 関数
isocalendar()
関数を使用して、曜日番号と週番号を取得し、曜日名を自分で割り当てる方法もあります。この方法は、ISO規格に準拠した曜日番号を取得することができます。
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18'])
series = pd.Series(dates)
# 曜日番号と週番号の取得
day_nums_week_nums = series.dt.isocalendar()
# 曜日名の割り当て
day_names = day_nums_week_nums.apply(lambda x: ['月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日', '日曜日'][x[1] - 1])
print(day_names)
出力結果
0 月曜日
1 火曜日
2 水曜日
Name: 0, dtype: object
利点
- 複雑なフォーマットにも柔軟に対応できる
- ISO規格に準拠した曜日番号を取得できる
欠点
- 処理速度が
weekday
属性とstrftime
フォーマットよりも遅い場合がある - コードがやや複雑になる
カスタム関数
曜日名を抽出するカスタム関数を作成する方法もあります。この方法は、柔軟性が高い反面、コード作成の手間がかかります。
import pandas as pd
# サンプルデータの作成
dates = pd.to_datetime(['2024-06-16', '2024-06-17', '2024-06-18'])
series = pd.Series(dates)
# 曜日名の抽出
def get_day_name(date):
if date.weekday() == 0:
return '月曜日'
elif date.weekday() == 1:
return '火曜日'
# ... 以下省略 ...
else:
return '日曜日'
day_names = series.apply(get_day_name)
print(day_names)
出力結果
0 月曜日
1 火曜日
2 水曜日
Name: 0, dtype: object
利点
- 複雑なフォーマットにも柔軟に対応できる
- 独自のロジックに基づいて曜日名を抽出できる
欠点
- 処理速度が遅くなる可能性がある
- コード作成の手間がかかる
pandas.Series.dt.day_name
メソッド以外にも、曜日名を抽出する方法はいくつかあります。状況に応じて、最適な方法を選択することが重要です。
- ISO規格に準拠した曜日番号を取得したい
- シンプルさや処理速度を重視する場合は、
weekday
属性とstrftime
フォーマットがおすすめです。