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

如何计算两个pandas datetime64[ns]序列间的工作日数并解决np.busday_count报错

错误原因

np.busday_count要求输入为datetime64[D]类型的数组,你使用.dt.date获取到的是Python原生datetime.date对象组成的object类型数组,numpy无法按照安全规则完成类型转换,因此抛出该错误。

解决方案

直接将pandas datetime列转为datetime64[D]类型后传入函数即可,代码如下:

import numpy as np
import pandas as pd

of['bdays'] = np.busday_count(
    of["DT_DEADLINE"].values.astype('datetime64[D]'),
    of["DT_DELIVERY"].values.astype('datetime64[D]')
)

注意:np.busday_count默认不包含结束日期当天,如果你的统计逻辑需要包含DT_DELIVERY当日的工作日,可将结束日期加1天后再计算,代码如下:

of['bdays'] = np.busday_count(
    of["DT_DEADLINE"].values.astype('datetime64[D]'),
    (of["DT_DELIVERY"] + pd.Timedelta(days=1)).values.astype('datetime64[D]')
)
示例运行结果

使用你提供的测试数据,用包含结束日期的版本计算,得到的结果如下:

DT_DEADLINE DT_DELIVERY  bdays
0   2021-08-05  2021-08-05      1
1   2021-08-09  2021-08-16      6
2   2021-08-10  2021-08-15      4
3   2021-08-09  2021-08-15      5
4   2021-08-05  2021-08-10      4

内容的提问来源于stack exchange,提问作者João Galdino

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:27:05