我需要将工作日添加到数据框中现有列中列出的日期。列中的数据采用datetime64 [ns]类型。使用Business days in Python中的建议,我尝试了下面列出的代码。
import datetime
from pandas.tseries.offsets import BDay
df['Math Admin Date'] + BDay(1)
我收到以下错误消息:
TypeError: cannot use a non-absolute DateOffset in datetime/timedelta operations [<BusinessDay>]
如何将工作日添加到我的日期时间列?
答案 0 :(得分:5)
不幸的是,偏移不支持使用类似数组的对象的操作,所以你必须apply
每个元素的偏移量:
In [208]:
import datetime as dt
from pandas.tseries.offsets import BDay
df = pd.DataFrame({'Math Admin Date':pd.date_range(start=dt.datetime(2015,6,1), end = dt.datetime(2015,6,30))})
df['Math Admin Date'].apply(lambda x: x + BDay(1))
Out[208]:
0 2015-06-02
1 2015-06-03
2 2015-06-04
3 2015-06-05
4 2015-06-08
5 2015-06-08
6 2015-06-08
7 2015-06-09
8 2015-06-10
9 2015-06-11
10 2015-06-12
11 2015-06-15
12 2015-06-15
13 2015-06-15
14 2015-06-16
15 2015-06-17
16 2015-06-18
17 2015-06-19
18 2015-06-22
19 2015-06-22
20 2015-06-22
21 2015-06-23
22 2015-06-24
23 2015-06-25
24 2015-06-26
25 2015-06-29
26 2015-06-29
27 2015-06-29
28 2015-06-30
29 2015-07-01
Name: Math Admin Date, dtype: datetime64[ns]
使用Timedelta
会有效,但目前不支持工作日:
df['Math Admin Date'] + pd.Timedelta(1,'D')
答案 1 :(得分:1)
对于版本:
In [1140]: pd.__version__
Out[1140]: '1.1.0'
不需要使用 apply
,它是引擎盖下的循环。你可以简单地做:
In [1138]: df['Math Admin Date'] = df['Math Admin Date'] + BDay(1)
In [1139]: df
Out[1139]:
Math Admin Date
0 2015-06-02
1 2015-06-03
2 2015-06-04
3 2015-06-05
4 2015-06-08
5 2015-06-08
6 2015-06-08
7 2015-06-09
8 2015-06-10
9 2015-06-11
10 2015-06-12
11 2015-06-15
12 2015-06-15
13 2015-06-15
14 2015-06-16
15 2015-06-17
16 2015-06-18
17 2015-06-19
18 2015-06-22
19 2015-06-22
20 2015-06-22
21 2015-06-23
22 2015-06-24
23 2015-06-25
24 2015-06-26
25 2015-06-29
26 2015-06-29
27 2015-06-29
28 2015-06-30
29 2015-07-01