我目前有一个程序设置可以运行两种不同的方式。一种方法是在指定的时间范围内运行,另一种方法是每天运行。但是,当我将它设置为每天运行时,我只希望它在一个工作日继续运行。现在从研究中我发现你可以像使用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()来做我想要的事情,但在我看来会很草率而且不直观。我觉得必须有一个更简单的解决方案。有什么建议吗?
答案 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)