Python中如何按工作日筛选DataFrame的指定行范围
Python 按工作日筛选 DataFrame 指定行范围教程

以下是基于 Pandas 库的完整实现方案,适配绝大多数常规场景:
前置准备
确保你的 DataFrame 包含格式为日期时间类型的日期列,如果读入数据时日期列为字符串格式,需要先做类型转换。
实现逻辑
- 先确认行范围筛选的顺序:你可以选择「先切指定行范围、再筛工作日」,或者「先筛所有工作日、再切指定行范围」,按需调整操作顺序即可
- 用 Pandas 内置的日期属性判断工作日:
dt.isoweekday()返回值 1~5 对应周一到周五,6、7 对应周末
注意:Pandas 的
iloc索引从0开始计数,切取范围为左闭右开规则,如果要取第3行到第15行的内容,需要写iloc[2:15]
完整代码示例
import pandas as pd # 示例数据构造,可替换为你的实际数据读入逻辑,比如 pd.read_excel/ pd.read_csv df = pd.DataFrame({ "date": pd.date_range(start="2024-01-01", end="2024-01-31"), "data": [i for i in range(31)] }) # 转换日期列为datetime类型,非日期类型的列必须执行此步 df["date"] = pd.to_datetime(df["date"]) # 场景1:先取第5行到第20行,再筛选范围内的工作日 df_range = df.iloc[4:20] workday_df = df_range[df_range["date"].dt.isoweekday().between(1, 5)] # 场景2:先筛选全表所有工作日,再取结果的前10行 # all_workday = df[df["date"].dt.isoweekday().between(1, 5)] # workday_df = all_workday.iloc[:10] print(workday_df)
扩展:包含法定节假日的工作日筛选
如果需要排除法定节假日、计入调休工作日(适配国内场景),可以使用第三方库 chinese_calendar 实现:
- 先安装依赖:
pip install chinese-calendar - 替换筛选逻辑即可:
from chinese_calendar import is_workday workday_df = df_range[df_range["date"].apply(is_workday)]
内容的提问来源于stack exchange,提问作者JaeSeok Lee
相关产品推荐
相关产品推荐

