web-dev-qa-db-ja.com

Pandasを使用して、Pythonデータフレームに曜日列を作成します

Pythonを使用してPandasデータフレームに曜日列を作成します

Csvファイルをpandasデータフレームに読み込み、文字列形式から日付オブジェクトまでの日付の列を解析してから、曜日を示す新しい列を生成します。

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

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

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'

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

40
James Eaves

パンダ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

パンダ0.18.1+

ユーザーjezraelが以下で指摘するように、dt.weekday_nameはバージョン0.18.1で追加されました Pandas Docs

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
91
Liam Foley

バージョン0.18.1が追加されました dt.weekday_name

print df
    my_dates  myvals
0 2015-01-01       1
1 2015-01-02       2
2 2015-01-03       3

print df.dtypes
my_dates    datetime64[ns]
myvals               int64
dtype: object

df['day_of_week'] = df['my_dates'].dt.weekday_name
print df
    my_dates  myvals day_of_week
0 2015-01-01       1    Thursday
1 2015-01-02       2      Friday
2 2015-01-03       3    Saturday

assign を使用した別のソリューション:

print df.assign(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
12
jezrael

dt.weekday_nameの使用は pandas 0.23.0以降廃止予定 で、代わりに dt.day_name() を使用します。

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['my_dates'].dt.day_name()

0    Thursday
1      Friday
2    Saturday
Name: my_dates, dtype: object
3
user3483203
df =df['Date'].dt.dayofweek

dayofweekは数値形式です

2
Catruc Iurie