如何计算两个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
相关产品推荐
相关产品推荐

