Yar*_*ari 12 python datetime weekday dayofweek pandas
如果我使用这个功能,pd.DatetimeIndex(dfTrain['datetime']).weekday我得到当天的数字,但我没有找到任何给出de day名称的函数...所以我需要将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
Run Code Online (Sandbox Code Playgroud)
还有一个问题,哪个是pandas.DatetimeIndex.dayofweek和pandas.DatetimeIndex.weekday?之间的区别?
EdC*_*ica 14
一种方法,只要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
Run Code Online (Sandbox Code Playgroud)
至于你的另一个问题,dayofweek和之间没有区别weekday.
将工作日的地图定义为工作日的String等效和调用地图会更快:
dayOfWeek={0:'Monday', 1:'Tuesday', 2:'Wednesday', 3:'Thursday', 4:'Friday', 5:'Saturday', 6:'Sunday'}
df['weekday'] = df['datetime'].dt.dayofweek.map(dayOfWeek)
Run Code Online (Sandbox Code Playgroud)
对于0.15.0以下版本之前的版本应该工作:
import datetime as dt
df['weekday'] = df['datetime'].apply(lambda x: dt.datetime.strftime(x, '%A'))
Run Code Online (Sandbox Code Playgroud)
版本0.18.1和更新版本
现在有一种新的便捷方法dt.weekday_name来完成上述工作
版本0.23.0及更新版本
weekday_name现在被描述为有利于dt.day_name.
jez*_*ael 12
在版本中,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
Run Code Online (Sandbox Code Playgroud)
不推荐使用using 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
Run Code Online (Sandbox Code Playgroud)