День Num для именин с пандами
если я использую это funtion pd.DatetimeIndex(dfTrain['datetime']).weekday
Я получаю номер дня, но я не нахожу никакой функции, которая дает имя дня... Поэтому мне нужно, чтобы преобразовать 0 в понедельник, 1 до Tuestday и так далее.
вот пример моего фрейма данных:
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
еще один вопрос больше, что разница между pandas.DatetimeIndex.dayofweek
и pandas.DatetimeIndex.weekday
?
3 ответов
один метод, пока datetime уже является столбцом datetime, должен применяться 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 теперь depricated в пользу 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
is удалены с 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