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 フォーマットがおすすめです。