Jus*_*tin 7 python datetime date 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"
Run Code Online (Sandbox Code Playgroud)
当我在指定的时间段内运行程序时,这非常有用.
但是,当我想每天运行该程序时,我无法弄清楚如何测试一个特定的日子作为工作日.基本上我想做这样的事情:
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"
Run Code Online (Sandbox Code Playgroud)
我知道我可以设置pd.bdate_range()来做我正在寻找的东西,但在我看来会很草率而且不直观.我觉得必须有一个更简单的解决方案.有什么建议?
Zev*_*ach 12
由于len
的pd.bdate_range()
告诉我们,天有多少企业在日期的供应范围,我们可以投这一个bool
,以确定是否一个范围是一天是工作日:
def is_business_day(date):
return bool(len(pd.bdate_range(date, date)))
Run Code Online (Sandbox Code Playgroud)
我刚刚找到了一个不同的解决方案。如果您想查找下一个工作日(如果您的日期不是工作日),这可能会很有趣。
bdays=BDay()
def is_business_day(date):
return date == date + 0*bdays
Run Code Online (Sandbox Code Playgroud)
添加会0*bdays
向前滚动到下一个工作日(包括当前工作日)。不幸的是,减法0*bdays
不会向后滚动(至少对于我使用的 pandas 版本)。
此外,由于这种行为,您也需要小心,因为不一定
0*bdays + 1*bdays != 1*bdays
pandas 有内置方法可以做到这一点。
对于 Pandas 版本 <1.0
from pandas.tseries.offsets import Day, BDay
from datetime import datetime
bday=BDay()
is_business_day = bday.onOffset(datetime(2020,8,20))
Run Code Online (Sandbox Code Playgroud)
对于 Pandas 版本 >=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))
Run Code Online (Sandbox Code Playgroud)