如何为pandas DataFrame添加仅含工作日的连续Date列
Pandas生成全年工作日日期列的实现方法
错误原因
原有代码先生成了包含全年所有自然日的日期序列,再统一偏移1个工作日,会出现多个自然日对应同一个工作日的问题:周五、周六、周日3天分别加1个BDay都会跳转至下周一,最终出现大量重复日期。
正确实现
pandas的date_range本身支持直接生成工作日序列,仅需将freq参数设置为'B'(代表工作日频率)即可,无需额外偏移处理。
场景1:固定起止日期(首行2021-10-07,末行2022-10-08)
import pandas as pd df = pd.DataFrame({ 'Date': pd.date_range(start='2021-10-07', end='2022-10-08', freq='B') })
场景2:动态从当日开始生成一整年的工作日序列
如果不需要固定起止日期,要从运行代码的当日开始计算,覆盖一整年时间范围内的所有工作日:
import pandas as pd import datetime as dt end_date = dt.date.today() + dt.timedelta(days=365) df = pd.DataFrame({ 'Date': pd.date_range(start=dt.date.today(), end=end_date, freq='B') })
以上实现生成的Date列都仅包含工作日,无重复值。如果需要自定义跳过法定节假日,可以把freq替换为对应国家/地区的工作日日历偏移量即可。
内容的提问来源于stack exchange,提问作者Zack
相关产品推荐
相关产品推荐

