python计算一段时间内的工作日(除周末、除中国节假日、加调休)和所有日期

您所在的位置:网站首页 一年多少个节假日和周末 python计算一段时间内的工作日(除周末、除中国节假日、加调休)和所有日期

python计算一段时间内的工作日(除周末、除中国节假日、加调休)和所有日期

#python计算一段时间内的工作日(除周末、除中国节假日、加调休)和所有日期| 来源: 网络整理| 查看: 265

python计算一段时间内的工作日(除周末)

’计算两个日期之间有几个工作日(除周末)、有几天(不除周末)都可以用python里pandas的函数实现。

1. 计算有几个工作日:

(1)bdate_range(start_day, end_day,freq='b')

start_day: 开始日期,日期格式可以兼容多种格式:2020-01-1或20200101或者1/1/2020!!!可以说是很完美了。

end_day:结束日期

freq:频率,bdate_range函数不带该参数时默认是'b',即工作日。计算工作日时,这个freq固定为B或b或者不带这个参数可以

以下是不同格式的实现:

# -*- coding: utf-8 -*- """ Created on Thu Mar 19 20:16:03 2020 @author: DELL """ def weekday_1(): import pandas as pd e = pd.bdate_range('20200319', '20200326',freq='b') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes) weekday_1() def weekday_2(): import pandas as pd e = pd.bdate_range('19/3/2020', '26/03/2020',freq='B') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes) weekday_2() def weekday_3(): import pandas as pd e = pd.bdate_range('2020-03-19', '2020-03-26') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes) weekday_3()

运行结果

runfile('C:/Users/DELL/Desktop/untitled0.py', wdir='C:/Users/DELL/Desktop') DatetimeIndex(['2020-03-19', '2020-03-20', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[ns]', freq='B') 6 DatetimeIndex(['2020-03-19', '2020-03-20', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[ns]', freq='B') 6 DatetimeIndex(['2020-03-19', '2020-03-20', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[ns]', freq='B') 6

(2)date_range(start_day, end_day,freq='b')

date_range 默认的freq是'd'就是日期的意思,如果不带参数计算出来就是所有的天数,所有如果要用date_range计算工作日,必须要带freq='b'的参数,其他开始日期和结束日期的格式跟bdate_range一样。

# -*- coding: utf-8 -*- """ Created on Thu Mar 19 20:16:03 2020 @author: DELL """ def weekday_4(): import pandas as pd e = pd.date_range('20200319', '20200326',freq='B') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes) weekday_4() runfile('C:/Users/DELL/Desktop/untitled0.py', wdir='C:/Users/DELL/Desktop') DatetimeIndex(['2020-03-19', '2020-03-20', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[ns]', freq='B') 6 2. 计算间隔的所有日期数(包含周末):

bdate_range(start_day, end_day,freq='d')

或 date_range(start_day, end_day)

# -*- coding: utf-8 -*- """ Created on Thu Mar 19 20:16:03 2020 @author: DELL """ def ALLday_1(): import pandas as pd e = pd.bdate_range('20200319', '20200326',freq='d') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes) ALLday_1() def ALLday_2(): import pandas as pd e = pd.date_range('19/3/2020', '26/03/2020',freq='d') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes) ALLday_2() def ALLday_3(): import pandas as pd e = pd.date_range('2020-03-19', '2020-03-26') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes) ALLday_3()

运行结果:

runfile('C:/Users/DELL/Desktop/untitled0.py', wdir='C:/Users/DELL/Desktop') DatetimeIndex(['2020-03-19', '2020-03-20', '2020-03-21', '2020-03-22', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[ns]', freq='D') 8 DatetimeIndex(['2020-03-19', '2020-03-20', '2020-03-21', '2020-03-22', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[ns]', freq='D') 8 DatetimeIndex(['2020-03-19', '2020-03-20', '2020-03-21', '2020-03-22', '2020-03-23', '2020-03-24', '2020-03-25', '2020-03-26'], dtype='datetime64[ns]', freq='D') 8

总结:bdate_range和date_range这两个函数都可以计算工作日和所有日期,关键取决于freq参数。

(1)bdate_range 的freq参数默认是b,也就是businesstime工作日;如果要用bdate_range 计算所有日期必须限制freq是d。

(2)date_range的freq参数默认是d,也就是day所有日期;如果要用bdate_range 计算所有日期必须限制freq是b。

b和d都是跟day维度的,所以从3月19号到3月26号,共包含:19、20、21、22、23、24、25、26八天,其中工作日有6天。

3. 利用freq='min'计算所有日期:

bdate_range(start_day, end_day,freq='min')

min是按照分钟维度来计算的,它是从start_day的00:00:00到end_day的00:00:00;其实end_day这一天从00:00:00到23:59:59是没有计算的,所以用freq='min'计算出来是比d计算出来少一天的。

# -*- coding: utf-8 -*- """ Created on Thu Mar 19 20:16:03 2020 @author: DELL """ def ALLday_4(): import pandas as pd e = pd.bdate_range('20200319', '20200326',freq='min') #bdate_range 6 #date_range 8 print (e) minutes = len(e) print(minutes//(60*24)) ALLday_4()

运行结果如下:

runfile('C:/Users/DELL/Desktop/untitled0.py', wdir='C:/Users/DELL/Desktop') DatetimeIndex(['2020-03-19 00:00:00', '2020-03-19 00:01:00', '2020-03-19 00:02:00', '2020-03-19 00:03:00', '2020-03-19 00:04:00', '2020-03-19 00:05:00', '2020-03-19 00:06:00', '2020-03-19 00:07:00', '2020-03-19 00:08:00', '2020-03-19 00:09:00', ... '2020-03-25 23:51:00', '2020-03-25 23:52:00', '2020-03-25 23:53:00', '2020-03-25 23:54:00', '2020-03-25 23:55:00', '2020-03-25 23:56:00', '2020-03-25 23:57:00', '2020-03-25 23:58:00', '2020-03-25 23:59:00', '2020-03-26 00:00:00'], dtype='datetime64[ns]', length=10081, freq='T') 7

分钟/60=小时

小时/24=天数

最后计算出来就是7天。

python计算一段时间内的工作日(除周末、除中国节假日加调休)

’计算两个日期之间有几个工作日(除周末、除假期加调休)可以用python里pandas的函数实现。

1. 计算有两个日期之间有几个工作日:

只需要配置节假日和调休日,放在列表中就ok!

我们以2020年5月为例,实现:计算5.1到5.9号工作日有几天:应该是5.6号、5.7号、5.8号、5.9号四天

start_day = '2020-05-01' end_day = '2020-05-09' import pandas as pd from pandas.tseries.offsets import CustomBusinessDay def count_businessday(start_day,end_day): b = CustomBusinessDay(holidays=['2020-04-06','2020-05-01','2020-05-04','2020-05-05','2020-06-25','2020-10-01', '2020-10-05','2020-10-06','2020-10-07','2020-10-08']) bus_day = pd.date_range(start=start_day, end=end_day, freq=b) length = len(bus_day) extra_work_day = ['2020-04-26','2020-05-09','2020-06-28','2020-09-27','2020-10-10'] extra_len = 0 for i in extra_work_day: if i>=start_day and i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3