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

Python+pandas读取Excel校验入职日期:无下周一记录顺延至周二问题

问题根因

你的代码有3个核心错误导致校验逻辑失效:

  1. 类型不匹配:你把next_monday转成了格式化字符串,却直接和datetime类型的now做相等判断,二者永远不可能相等,周一的判断分支根本不会触发。
  2. 校验方法错误:hr_file_readable.all()的作用是判断Series内所有元素是否都为真值,完全不是用来检查“列中是否存在某个日期值”的方法。
  3. 提前转字符串埋坑:你读入Excel后第一时间把入职日期转成了带平台依赖的格式化字符串(%#m是Windows独有的去前导零写法,跨平台会出格式不一致问题),哪怕比对逻辑写对了,也很容易因为格式差漏匹配。
    另外你重复写了两段完全一致的判断分支,属于冗余代码,很容易引发逻辑混乱。
修正方案

所有日期比对全程用原生date类型完成,只在最后需要输出结果的时候再转成你要的字符串格式,从根源避免类型、格式不匹配问题。pandas中判断某列是否存在目标值,直接对列做布尔判断后调用.any()即可,只要有一条记录匹配就会返回True。

修正后的可运行代码:

import pandas as pd
import datetime as DT
from dateutil.relativedelta import relativedelta, MO, TU

# 取当前日期,自动去掉时分秒避免比对偏差
current_date = DT.datetime.now().date()
target_date = None

# 判断当日是否为周一(weekday()返回0代表周一,6代表周日)
if current_date.weekday() != 0:
    # 非周一的场景可按需扩展逻辑,这里按需求仅处理周一触发的场景
    print("今日不是周一,无需执行日期计算")
else:
    # 初始目标日期设为下周一
    target_date = current_date + relativedelta(weekday=MO(1))

    # 读取Excel并处理入职日期列,全程保留date类型做比对
    hr_df = pd.read_excel("Upcoming Hires.xlsx", sheet_name="New Hires")
    hr_df["Start Date"] = pd.to_datetime(hr_df["Start Date"], errors="coerce").dt.date

    # 校验是否存在入职日期为下周一的记录
    has_monday_entry = (hr_df["Start Date"] == target_date).any()

    # 无匹配记录则将目标日期调整为下周二
    if not has_monday_entry:
        target_date = current_date + relativedelta(weekday=TU(1))

    # 最终需要输出m/d/yy格式时再转字符串,注意Windows用%#前缀去前导零,Mac/Linux换%-前缀
    target_date_fmt = target_date.strftime("%#m/%#d/%y")
    print(f"最终目标日期:{target_date_fmt}")
关键说明
  • 用.dt.date把pandas的时间类型转成原生date对象,和当前日期的类型完全一致,比对不会有偏差。
  • (hr_df["Start Date"] == target_date).any()会逐行比对入职日期和目标值,只要有1条匹配就返回True,正好符合你“检查是否存在对应记录”的需求。
  • 去掉了所有冗余的重复判断分支,逻辑按“判断周几→设初始目标日期→读表校验→调整日期”的顺序线性执行,后续要扩展到周三、周四的判断也很方便。
  • 如果需要在非Windows系统运行,把strftime里的%#m/%#d/%#y换成%-m/%-d/%y即可,或者自己写个小函数去掉日期前导零,避免平台兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:45:37