使用Numpy计算工作日出现不一致,这是Bug还是使用方式有误?
Numpy busday_count 计算工作日的结果差异解析
这不是Numpy的Bug,是你对busday_count的区间规则理解有误。
核心规则
np.busday_count(start, end)计算的是左闭右开区间[start, end)内的工作日数量:
- 包含
start日期(如果当天是工作日) - 不包含
end日期(无论当天是否是工作日)
两个月份的差异原因
2023年1月
2023-01-01是周日(非工作日),2023-01-31是周二(工作日)busday_count返回的是1月2日到1月30日的工作日数(共21天),但整个1月的工作日包含1月31日,所以需要加1得到22天的正确结果。
2023年12月
2023-12-01是周五(工作日),2023-12-31是周日(非工作日)busday_count返回的是12月1日到12月30日的工作日数(共21天),而12月31日本身是非工作日,所以这个结果就是整个月的正确工作日数,无需加1。
正确用法
如果要计算包含起始日和结束日在内的全时间段工作日数,最通用的方式是将结束日期往后推1天,让函数自然包含原结束日:
import numpy as np # 计算2023年1月全月工作日(含1号和31号) jan_total = np.busday_count('2023-01-01', '2023-01-31' + np.timedelta64(1, 'D')) print(f"Jan: {jan_total}") # 输出22 # 计算2023年12月全月工作日(含1号和31号) dec_total = np.busday_count('2023-12-01', '2023-12-31' + np.timedelta64(1, 'D')) print(f"Dec: {dec_total}") # 输出21
内容的提问来源于stack exchange,提问作者M4X_
相关产品推荐
相关产品推荐

