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

使用np.busday_count计算工作日间隔时如何处理NaT值问题

问题解决逻辑

你之前使用f['Start time'] is pd.NaT的写法存在问题:is是用于判断单个对象身份的运算符,无法直接对整个Series做批量矢量判断,判断Series内的NaT值要使用.isna()方法。

实现方案

首先先将两列统一转为datetime格式,减少重复代码:

f['Start time'] = pd.to_datetime(f['Start time'])
f['Stop time'] = pd.to_datetime(f['Stop time'])

方案1:保留NaT对应的空值

np.busday_count本身支持datetime64类型的NaT输入,对应行计算结果会自动返回NaT,无需额外判断:

f['days'] = np.busday_count(
    f['Start time'].values.astype('datetime64[D]'),
    f['Stop time'].values.astype('datetime64[D]')
)

方案2:给含NaT的行指定默认值

如果需要给起止时间存在NaT的行设置自定义默认值(比如0、-1等),可以结合np.where做条件判断:

# 示例:只要起止时间有一个为NaT,days赋值为0,否则计算工作日天数
f['days'] = np.where(
    f['Start time'].isna() | f['Stop time'].isna(),
    0, # 可替换为你需要的默认值
    np.busday_count(
        f['Start time'].values.astype('datetime64[D]'),
        f['Stop time'].values.astype('datetime64[D]')
    )
)

补充说明

如果需要单独判断某一行单个值是不是NaT,可以用f.loc[行索引, 'Start time'] is pd.NaT的写法;批量判断多个条件时,或逻辑用位运算符|,且逻辑用位运算符&,注意每个判断条件要单独加括号。

内容的提问来源于stack exchange,提问作者d8888d

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:24:05