この関数を使用するとpd.DatetimeIndex(dfTrain['datetime']).weekday
日の番号が表示されますが、de dayの名前を付ける関数が見つかりません...したがって、0を月曜日に、1を火曜日に変換してなど。
これが私のデータフレームの例です:
datetime season holiday workingday weather temp atemp humidity windspeed count
0 2011-01-01 00:00:00 1 0 0 1 9.84 14.395 81 0.0000 16
1 2011-01-01 01:00:00 1 0 0 1 9.02 13.635 80 0.0000 40
2 2011-01-01 02:00:00 1 0 0 1 9.02 13.635 80 0.0000 32
3 2011-01-01 03:00:00 1 0 0 1 9.84 14.395 75 0.0000 13
4 2011-01-01 04:00:00 1 0 0 1 9.84 14.395 75 0.0000 1
5 2011-01-01 05:00:00 1 0 0 2 9.84 12.880 75 6.0032 1
6 2011-01-01 06:00:00 1 0 0 1 9.02 13.635 80 0.0000 2
7 2011-01-01 07:00:00 1 0 0 1 8.20 12.880 86 0.0000 3
8 2011-01-01 08:00:00 1 0 0 1 9.84 14.395 75 0.0000 8
9 2011-01-01 09:00:00 1 0 0 1 13.12 17.425 76 0.0000 14
もう1つの質問、pandas.DatetimeIndex.dayofweek
とpandas.DatetimeIndex.weekday
の違いはどれですか?
日時がすでに日時列である限り、1つの方法は、datetime.strftime
を適用して平日の文字列を取得することです。
In [105]:
df['weekday'] = df[['datetime']].apply(lambda x: dt.datetime.strftime(x['datetime'], '%A'), axis=1)
df
Out[105]:
datetime season holiday workingday weather temp atemp \
0 2011-01-01 00:00:00 1 0 0 1 9.84 14.395
1 2011-01-01 01:00:00 1 0 0 1 9.02 13.635
2 2011-01-01 02:00:00 1 0 0 1 9.02 13.635
3 2011-01-01 03:00:00 1 0 0 1 9.84 14.395
4 2011-01-01 04:00:00 1 0 0 1 9.84 14.395
5 2011-01-01 05:00:00 1 0 0 2 9.84 12.880
6 2011-01-01 06:00:00 1 0 0 1 9.02 13.635
7 2011-01-01 07:00:00 1 0 0 1 8.20 12.880
8 2011-01-01 08:00:00 1 0 0 1 9.84 14.395
9 2011-01-01 09:00:00 1 0 0 1 13.12 17.425
humidity windspeed count weekday
0 81 0.0000 16 Saturday
1 80 0.0000 40 Saturday
2 80 0.0000 32 Saturday
3 75 0.0000 13 Saturday
4 75 0.0000 1 Saturday
5 75 6.0032 1 Saturday
6 80 0.0000 2 Saturday
7 86 0.0000 3 Saturday
8 75 0.0000 8 Saturday
9 76 0.0000 14 Saturday
他の質問に関しては、dayofweek
とweekday
の間に違いはありません。
平日のマップを文字列に相当するものに定義し、平日にマップを呼び出す方が簡単です。
dayOfWeek={0:'Monday', 1:'Tuesday', 2:'Wednesday', 3:'Thursday', 4:'Friday', 5:'Saturday', 6:'Sunday'}
df['weekday'] = df['datetime'].dt.dayofweek.map(dayOfWeek)
0.15.0
より前のバージョンの場合、以下が機能するはずです。
import datetime as dt
df['weekday'] = df['datetime'].apply(lambda x: dt.datetime.strftime(x, '%A'))
バージョン0.18.1以降
上記を行うための新しい便利なメソッドがあります dt.weekday_name
バージョン0.23.0以降
weekday_nameは、 dt.day_name
を優先して非表示になりました。
バージョン0.18.1
新しい方法を使用できます dt.weekday_name
:
df['weekday'] = df['datetime'].dt.weekday_name
print df
datetime season holiday workingday weather temp atemp \
0 2011-01-01 00:00:00 1 0 0 1 9.84 14.395
1 2011-01-01 01:00:00 1 0 0 1 9.02 13.635
2 2011-01-01 02:00:00 1 0 0 1 9.02 13.635
3 2011-01-01 03:00:00 1 0 0 1 9.84 14.395
4 2011-01-01 04:00:00 1 0 0 1 9.84 14.395
5 2011-01-01 05:00:00 1 0 0 2 9.84 12.880
6 2011-01-01 06:00:00 1 0 0 1 9.02 13.635
7 2011-01-01 07:00:00 1 0 0 1 8.20 12.880
8 2011-01-01 08:00:00 1 0 0 1 9.84 14.395
9 2011-01-01 09:00:00 1 0 0 1 13.12 17.425
humidity windspeed count weekday
0 81 0.0000 16 Saturday
1 80 0.0000 40 Saturday
2 80 0.0000 32 Saturday
3 75 0.0000 13 Saturday
4 75 0.0000 1 Saturday
5 75 6.0032 1 Saturday
6 80 0.0000 2 Saturday
7 86 0.0000 3 Saturday
8 75 0.0000 8 Saturday
9 76 0.0000 14 Saturday
_dt.weekday_name
_の使用は _pandas 0.23.0
_ のため非推奨ですが、代わりに dt.day_name()
を使用してください。
_df.datetime.dt.day_name()
0 Saturday
1 Saturday
2 Saturday
3 Saturday
4 Saturday
5 Saturday
6 Saturday
7 Saturday
8 Saturday
9 Saturday
Name: datetime, dtype: object
_
@jezraelからの前の正しい回答に加えて、これを使用できます:
import calendar
df['weekday'] = pd.Series(pd.Categorical(df['datetime'].dt.weekday_name, categories=list(calendar.day_name)))
これにより、新しいカテゴリ変数にorder(この例では 'Monday'、...、 'Sunday')が this 。これは、分析の次のステップで役立つ可能性があります。