Python区分工作日、周末、法定假日的方法
-10-14 19:50:56 来源: 晴天小雨
0
摘要:工作中由于需要按工作日、周末的维度进行统计分析,故需要对给定的一段时间进行工作日、周末、法定假日的标记,对其解决方法进行记录,以便日后复用。
法定假日标记说明
法定假日的标记需要使用到第三方库,即workalendar
直接pip安装即可:pip install workalendar
需要注意是的,由于这个库的法定假日只是配置了今年,如果下年也要使用这个库,需要手动进行配置,或者查看官网是否进行对法定假日进行了更新,然后决定是否同步即可。
标记法定假日
from workalendar.asia import China
def cal_festival(year_list):
cal = China()
date_list = []
for year in year_list:
for x, v in cal.holidays(year):
date_list.append([str(x), v])
# 没有的收集的假日,手动添加
date_list.append(['-05-04', 'Labour Day Holiday'])
df = pd.DataFrame(data=date_list, columns=['date', 'festival'])
return df
标记工作日、周末
def date_to_week(start_time, end_time):
# 把时间列标准化时间格式
df = pd.DataFrame()
df['date'] = pd.date_range(start=start_time, end=end_time)
# 1-5表示工作日,6-7表示周末
df['day_of_week'] = df['date'].dt.dayofweek + 1
df['date'] = df['date'].map(lambda x: x.strftime('%Y-%m-%d'))
return df
标记工作日、周末,过滤法定假日
if __name__ == '__main__':
start_date = "-09-01"
end_date = "-09-30"
df_festival = cal_festival([])
date_festival_list = df_festival["date"].tolist()
df_date = date_to_week(start_date, end_date)
df_filter_date = df_date[~df_date["date"].isin(date_festival_list)].copy()
print(df_filter_date)
标记工作日、周末、法定假日
if __name__ == '__main__':
start_date = "-09-01"
end_date = "-09-30"
df_festival = cal_festival([])
df_date = date_to_week(start_date, end_date)
df_filter_date = pd.merge(df_date, df_festival, on=["date"], how="left")
print(df_filter_date)
收藏
已收藏取消收藏
登录发表你的评论
0条评论