将嵌套If条件应用于dataframe-Python
我正在连接SQL数据库并生成数据帧,在凌晨4点到6点之间睡眠时间为5分钟,持续2小时,并尝试检查作业状态,以下是我尝试实现的条件 在所有的工作中,我想做的是: 如果有任何作业正在运行,请检查它是否在预计时间内完成 如果是,则打印在预计时间内正常运行 else打印已超出预计时间。 否则,请检查最后一个作业是否已完成,然后打印所有已完成的作业。 数据如下: 我的代码:将嵌套If条件应用于dataframe-Python,python,sql-server,dataframe,if-statement,Python,Sql Server,Dataframe,If Statement,我正在连接SQL数据库并生成数据帧,在凌晨4点到6点之间睡眠时间为5分钟,持续2小时,并尝试检查作业状态,以下是我尝试实现的条件 在所有的工作中,我想做的是: 如果有任何作业正在运行,请检查它是否在预计时间内完成 如果是,则打印在预计时间内正常运行 else打印已超出预计时间。 否则,请检查最后一个作业是否已完成,然后打印所有已完成的作业。 数据如下: 我的代码: i=0 while i <12: todays_run="select * from table
i=0
while i <12:
todays_run="select * from table where getdate()=startdate" /*Checking for rundate as todays date*/
result=pd.read_sql(todays_run,sql_conn)
if result.empty:
print(' No jobs are running :')
elif result[result.status=='RUNNING' and result.start_date <result.estimated_end]:
print("Below jobs are currently running with estimated time \n\n ",result)
else print("Jobs taking long time",<job_name>)
elsif result[result.status=='COMPLETED' and result.jobname='A']
print("all jobs are completed \n \n ")
time.sleep(60)
exit(1)
这可以使用python实现吗?在您的elif条件下,您可能一次计算多行。这就是您收到该错误的原因。
如果您不关心有多少行符合您的条件,可以尝试:
elif结果[result.status==“RUNNING”和result.start\u date在您的elif条件下,您可能一次计算多行。这就是您收到该错误的原因。
如果您不关心有多少行符合您的条件,可以尝试:
elif result[result.status=='RUNNING'和result.start_date系列掩码在这种情况下会有所帮助。应用于数据帧每行的每个逻辑条件都会生成一个真/假值列表/系列 然后,您可以使用df.loc[mask]访问行,并将逻辑and转换为位掩码&以将掩码组合在一起。我还喜欢说mask.any或mask.all,这取决于逻辑测试。这些技巧帮助我完成您试图实现的步骤 下面是一些你试图实现的想法,转化为一个系列面具 对于我来说,范围12: 将运行日期检查为今天日期 todays_run=从getdate=startdate的表中选择* 结果=pd.read\u sqltodays\u run,sql\u conn 正在运行\u掩码=结果[状态]=“正在运行” 已完成\u掩码=结果[状态]=“已完成” jobname\u a\u mask=结果[jobname]=“a” 估计的\u掩码=结果[开始日期]<结果[估计的\u结束] 如果result.empty: 打印“没有作业正在运行:” elif运行\u掩码和估计\u掩码。任何: printBelow作业当前正在以估计的时间运行\n\n, result.loc[运行\u掩码和估计\u掩码] else作业名称\u a\u掩码和已完成的\u掩码。全部: 打印所有作业都已完成\n\n 时间到了 出口1
系列掩码在这种情况下会有所帮助。应用于数据帧每行的每个逻辑条件都会生成一个真/假值列表/系列 然后,您可以使用df.loc[mask]访问行,并将逻辑and转换为位掩码&以将掩码组合在一起。我还喜欢说mask.any或mask.all,这取决于逻辑测试。这些技巧帮助我完成您试图实现的步骤 下面是一些你试图实现的想法,转化为一个系列面具 对于我来说,范围12: 将运行日期检查为今天日期 todays_run=从getdate=startdate的表中选择* 结果=pd.read\u sqltodays\u run,sql\u conn 正在运行\u掩码=结果[状态]=“正在运行” 已完成\u掩码=结果[状态]=“已完成” jobname\u a\u mask=结果[jobname]=“a” 估计的\u掩码=结果[开始日期]<结果[估计的\u结束] 如果result.empty: 打印“没有作业正在运行:” elif运行\u掩码和估计\u掩码。任何: printBelow作业当前正在以估计的时间运行\n\n, result.loc[运行\u掩码和估计\u掩码] else作业名称\u a\u掩码和已完成的\u掩码。全部: 打印所有作业都已完成\n\n 时间到了 出口1
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().