Метод 1:
Преобразовать df['Date']
в строку перед тем, как передать np.is_busday
:
df['Is_Business_Day'] = [np.is_busday(x) for x in df['Date'].astype(str)]
Метод 2:
Вы можете просто использовать pandas
вместо numpy
и проверить, находится ли Date
в диапазоне рабочих дней от вашей минимальной даты до вашей максимальной даты:
bus_days = pd.bdate_range(df['Date'].min(), df['Date'].max())
df['Is_Business_Day'] = df['Date'].isin(bus_days)
Примеры:
>>> df = pd.DataFrame({'Date':pd.date_range(pd.to_datetime('today'), pd.to_datetime('2018-09-15'))})
>>> df
Date
0 2018-08-29
1 2018-08-30
2 2018-08-31
3 2018-09-01
4 2018-09-02
5 2018-09-03
6 2018-09-04
7 2018-09-05
8 2018-09-06
9 2018-09-07
10 2018-09-08
11 2018-09-09
12 2018-09-10
13 2018-09-11
14 2018-09-12
15 2018-09-13
16 2018-09-14
17 2018-09-15
Вы можете сделать:
Метод 1 :
>>> df['Is_Business_Day'] = [np.is_busday(x) for x in df['Date'].astype(str)]
>>> df
Date Is_Business_Day
0 2018-08-29 True
1 2018-08-30 True
2 2018-08-31 True
3 2018-09-01 False
4 2018-09-02 False
5 2018-09-03 True
6 2018-09-04 True
7 2018-09-05 True
8 2018-09-06 True
9 2018-09-07 True
10 2018-09-08 False
11 2018-09-09 False
12 2018-09-10 True
13 2018-09-11 True
14 2018-09-12 True
15 2018-09-13 True
16 2018-09-14 True
17 2018-09-15 False
Метод 2 :
>>> bus_days = pd.bdate_range(df['Date'].min(), df['Date'].max())
>>> df['Is_Business_Day'] = df['Date'].isin(bus_days)
>>> df
Date Is_Business_Day
0 2018-08-29 True
1 2018-08-30 True
2 2018-08-31 True
3 2018-09-01 False
4 2018-09-02 False
5 2018-09-03 True
6 2018-09-04 True
7 2018-09-05 True
8 2018-09-06 True
9 2018-09-07 True
10 2018-09-08 False
11 2018-09-09 False
12 2018-09-10 True
13 2018-09-11 True
14 2018-09-12 True
15 2018-09-13 True
16 2018-09-14 True
17 2018-09-15 False