确定某一天在Python / Pandas中是否为工作日



我目前有一个程序设置以两种不同的方式运行。一种方法是在指定的时间范围内跑步,另一种方法是每天跑步。然而,当我将它设置为每天运行时,我只希望它在工作日继续运行。现在,从研究中我看到,您可以像这样使用Pandas来迭代工作日:

start = 2016-08-05
end = datetime.date.today().strftime("%Y-%m-%d")
for day in pd.bdate_range(start, end):
    print str(day) + " is a business Day"

当我在指定的时间内运行我的程序时,这工作得很好。

但是,当我想让程序每天运行时,我不太清楚如何将特定的一天作为工作日进行测试。基本上我想这样做:

start = datetime.date.today().strftime("%Y-%m-%d")
end = datetime.date.today().strftime("%Y-%m-%d")
if start == end:
    if not Bdate(start)
        print "Not a Business day"

我知道我可能可以设置pd.bdate_range()来做我正在寻找的东西,但在我看来,这将是草率和不直观的。我觉得肯定有更简单的解决办法。任何建议吗?

由于pd.bdate_range()len告诉我们提供的日期范围中有多少个工作日,我们可以将其转换为bool以确定单个天的范围是否为工作日:

def is_business_day(date):
    return bool(len(pd.bdate_range(date, date)))

我刚刚找到了一个不同的解决方案。如果你想找到下一个工作日,而你的约会不是工作日,这可能会很有趣。

   bdays=BDay()
   def is_business_day(date):
       return date == date + 0*bdays

添加0*bdays在包括当前工作日在内的下一个工作日前滚。不幸的是,减去0*bdays不能向后滚(至少对于我使用的pandas版本)。

此外,由于这种行为,您也需要小心,因为不一定0*bdays + 1*bdays != 1*bdays

在pandas中有一个内置的方法。

For Pandas version <1.0

from pandas.tseries.offsets import Day, BDay
from datetime import datetime

bday=BDay()
is_business_day = bday.onOffset(datetime(2020,8,20))

For Pandas version>=1.1.0 (onOffset已弃用)

from pandas.tseries.offsets import Day, BDay
from datetime import datetime

bday=BDay()
is_business_day = bday.is_on_offset(datetime(2020,8,20))

至少使用numpy 1.7.0版本。,试试np.is_busday()

start = datetime.date.today().strftime("%Y-%m-%d")
end = datetime.date.today().strftime("%Y-%m-%d")
if start == end:
    # added code here
    if not np.is_busday(start):
        print("Not a Business day")

对于我来说,我使用了Excel中的一个老技巧:

from pandas.tseries.offsets import Day, BDay
def is_bday(x):
    return x == x + Day(1) - BDay(1)

请查看此模块- bdateutil

请使用上面的模块检查下面的代码:

from bdateutil import isbday
from datetime import datetime,date
now = datetime.now()
val = isbday(date(now.year, now.month, now.day))
print val

如果有帮助,请告诉我。

相关内容

  • 没有找到相关文章

最新更新