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

如何按上月最后工作日至当日的日期范围过滤Pandas数据

解决方案:自动获取上月最后工作日并过滤Pandas数据

步骤1:计算上月最后一个工作日

借助datetime和calendar模块实现自动计算,逻辑如下:

  • 先获取当月第一天,往前推1天得到上月最后一天
  • 判断该日期是否为周末(周六对应weekday值5,周日为6,周一至周五为0-4),如果是则逐步往前调整至最近工作日

代码实现:

import datetime

today = datetime.date.today()
# 获取上月最后一天
last_day_last_month = (today.replace(day=1) - datetime.timedelta(days=1))
# 调整到最近工作日
while last_day_last_month.weekday() >= 5:
    last_day_last_month -= datetime.timedelta(days=1)
start_date = last_day_last_month
end_date = today

步骤2:处理Pandas数据并过滤

首先需要将DataFrame中的日期列转换为datetime类型(字符串无法直接进行日期范围比较),再执行过滤操作。结合你的示例代码,完整流程如下:

import pandas as pd

# 读取并预处理数据
example = pd.read_excel("C:/Users/USER/Downloads/Movimentos.xls")
example = example.drop(columns=['Data Valor', 'Descrição', 'Valor'])

# 将日期列转换为datetime类型(匹配原数据的dd/mm/yyyy格式)
example['Data Operação'] = pd.to_datetime(example['Data Operação'], format='%d/%m/%Y')

# 计算起止日期
today = datetime.date.today()
last_day_last_month = (today.replace(day=1) - datetime.timedelta(days=1))
while last_day_last_month.weekday() >= 5:
    last_day_last_month -= datetime.timedelta(days=1)
start_date = pd.to_datetime(last_day_last_month)
end_date = pd.to_datetime(today)

# 过滤日期范围内的数据
filtered_example = example[(example['Data Operação'] >= start_date) & (example['Data Operação'] <= end_date)]

# 按日期降序排序并展示
filtered_example = filtered_example.sort_values(by='Data Operação', ascending=False)
display(filtered_example)

关键说明

  • 日期转换时,format='%d/%m/%Y'需与你数据中的日期格式匹配,若格式为mm/dd/yyyy则需调整参数
  • 使用while循环而非单次判断,是为了覆盖所有周末情况(比如上月最后一天是周日时,自动减2天到周五)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:55:35