如何按上月最后工作日至当日的日期范围过滤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
相关产品推荐
相关产品推荐

