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

如何用Pandas遍历列计算工作日并将NaTs转换为NaN?

Pandas计算事件日期与月/日的工作日天数

步骤说明

  1. 转换月/日列为完整日期:把每个月/日列的字符串和Event Date的年份组合,生成当年的完整日期,无效日期(比如非闰年的2/29)会转为NaT。
  2. 计算工作日天数:用pd.busday_count统计两个日期之间的工作日数量,NaT会自动转为NaN。
  3. 替换原列结果:把计算出的工作日天数替换原月/日列的值。

代码实现

import pandas as pd

# 假设你的DataFrame已加载,且'Event Date'列是datetime类型
df = pd.read_csv('your_data.csv', parse_dates=['Event Date'])

# 筛选出所有月/日列(排除'Event Date')
month_day_columns = [col for col in df.columns if col != 'Event Date']

# 第一步:将月/日列转换为当年的完整日期
for col in month_day_columns:
    # 组合Event Date的年份与当前列的月/日,生成datetime
    df[col] = pd.to_datetime(
        df['Event Date'].dt.year.astype(str) + '-' + col,
        errors='coerce'  # 无效日期转为NaT
    )

# 第二步:计算工作日天数
df[month_day_columns] = df[month_day_columns].apply(
    lambda col: pd.busday_count(col, df['Event Date']),
    axis=0
)

# 查看结果
print(df)

关键细节

  • pd.busday_count(start, end):统计start到end之间的工作日数量(不包含end),如果start晚于end会返回负数。
  • errors='coerce':确保无效的月/日组合(如非闰年的2/29)转为NaT,后续计算自动转为NaN。
  • 若需要反向计算(即Event Date到目标日期的工作日数),只需调换busday_count的参数顺序:pd.busday_count(df['Event Date'], col)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:55:26