确定Python / Pandas中的某一天是否是营业日

时间:2016-08-21 18:37:32

标签: python date datetime 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()来做我想要的事情,但在我看来会很草率而且不直观。我觉得必须有一个更简单的解决方案。有什么建议吗?

6 个答案:

答案 0 :(得分:10)

由于len的{​​{1}}告诉我们在提供的日期范围内有多少个工作日,我们可以将其投放到pd.bdate_range()以确定单日的范围是否为工作日:

bool

答案 1 :(得分:3)

我刚刚找到了另一种解决方案。如果您想在下个工作日找到一个工作日,这可能会很有趣。

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

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

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

答案 2 :(得分:1)

有内置的方法可以在熊猫中做到这一点。

对于熊猫版<1.0

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


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

对于熊猫版本> = 1.1.0 (不推荐使用onOffset

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


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

答案 3 :(得分:0)

请查看此模块 - bdateutil

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

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

如果有这个帮助,请告诉我。

答案 4 :(得分:0)

至少使用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")

答案 5 :(得分:0)

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

from pandas.tseries.offsets import Day, BDay

def is_bday(x):
    return x == x + offsets.Day(1) - offsets.BDay(1)