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

如何从Pandas日期序列提取周一至周五?求非datetime替代方案

提取工作日日期的两种实用方案

嘿,刚好碰到过类似需求,给你两种靠谱的解决办法:

方案一:基于你现有Pandas代码的优化(推荐)

其实Pandas的date_range本身就支持直接生成周一到周五的工作日序列,不用先生成全量日期再过滤,效率更高:

from datetime import datetime
import pandas as pd

start = datetime(2018, 3, 4)
end = datetime(2018, 3, 17)
# 使用freq='B'直接生成工作日序列,B代表Business Day(工作日)
workdays = pd.date_range(start, end, freq='B')
print(workdays)

如果已经生成了包含周末的全量序列index1,也可以事后过滤,利用日期的weekday属性(0=周一,4=周五,5/6=周末):

# 从已有的index1中筛选工作日
filtered_workdays = index1[index1.weekday < 5]
print(filtered_workdays)

方案二:不使用datetime的纯标准库方案

如果不想依赖datetime模块,咱们可以用Python内置的calendar模块手动生成日期并筛选:

import calendar

def get_workdays(year, start_month, start_day, end_month, end_day):
    workdays = []
    current_day = start_day
    current_month = start_month
    # 循环遍历日期范围
    while (current_month, current_day) <= (end_month, end_day):
        # calendar.weekday返回0=周一,4=周五,符合条件就加入列表
        if calendar.weekday(year, current_month, current_day) < 5:
            workdays.append(f"{year}-{current_month:02d}-{current_day:02d}")
        # 处理日期进位逻辑
        current_day += 1
        last_day = calendar.monthrange(year, current_month)[1]
        if current_day > last_day:
            current_day = 1
            current_month += 1
    return workdays

# 调用函数获取2018-03-04到2018-03-17的工作日
result = get_workdays(2018, 3, 4, 3, 17)
print(result)

这个函数会返回字符串格式的工作日日期,你可以根据需求调整输出格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:47:34