You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:52:41