1. ホーム
  2. python

Pythonを使用してPandasデータフレームに曜日カラムを作成する

2023-10-01 08:41:23

質問内容

Pythonを使用してPandasデータフレームに曜日カラムを作成する。

csvファイルをpandasのdataframeに読み込み、日付の列を文字列フォーマットから日付オブジェクトにパースし、曜日を示す新しい列を生成したいと思います。

これは私が試していることです。

私がやりたいことは、次のようなことです。

import pandas as pd

import csv

df = pd.read_csv('data.csv', parse_dates=['date']))

df['day-of-week'] = df['date'].weekday()


AttributeError: 'Series' object has no attribute 'weekday'


ご協力ありがとうございました。 ジェームズ

どのように解決するのですか?

Pandas 0.23以上

使用方法 pandas.Series.dt.day_name() というように pandas.Timestamp.weekday_name は非推奨とされているからです。

import pandas as pd


df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]})
df['my_dates'] = pd.to_datetime(df['my_dates'])

df['day_of_week'] = df['my_dates'].dt.day_name()

出力します。

    my_dates  myvals day_of_week
0 2015-01-01       1    Thursday
1 2015-01-02       2      Friday
2 2015-01-03       3    Saturday

Pandas 0.18.1+

ユーザーのjezraelさんが下記で指摘されているように dt.weekday_name はバージョン 0.18.1 で追加された Pandas ドキュメント

import pandas as pd

df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]})
df['my_dates'] = pd.to_datetime(df['my_dates'])
df['day_of_week'] = df['my_dates'].dt.weekday_name

出力します。

    my_dates  myvals day_of_week
0 2015-01-01       1    Thursday
1 2015-01-02       2      Friday
2 2015-01-03       3    Saturday

オリジナルの回答

これを使う。

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.dayofweek.html

こちらをご覧ください。

DataFrameのDatetimeカラムの曜日/日付の取得

もし、整数の代わりに文字列が欲しい場合は、以下のようにします。

import pandas as pd

df = pd.DataFrame({'my_dates':['2015-01-01','2015-01-02','2015-01-03'],'myvals':[1,2,3]})
df['my_dates'] = pd.to_datetime(df['my_dates'])
df['day_of_week'] = df['my_dates'].dt.dayofweek

days = {0:'Mon',1:'Tues',2:'Weds',3:'Thurs',4:'Fri',5:'Sat',6:'Sun'}

df['day_of_week'] = df['day_of_week'].apply(lambda x: days[x])

出力します。

    my_dates  myvals day_of_week
0 2015-01-01       1       Thurs
1 2015-01-02       2         Fri
2 2015-01-01       3       Thurs