DataFrame的真值不明确.在python中的if-elif语句中使用a.empty、a.bool()、a.item



我在if-else条件下面临问题。在下面的代码中,它只在条件剩余时先检查,然后跳过。但根据我给出的场景,它应该运行第二个elif条件。不确定为什么不检查第二个elif语句。在例外情况下,它抛出"quot;DataFrame的真值不明确。使用a.empty、a.bool((、a.item((、.any((或.all(("quot;

def aggregated_cnt_check():
try:
#print(not df_src2.empty)
if pd.isnull(df_src2) or pd.isnull(df_tgt2):
df_agg_diff = pd.DataFrame()
return df_agg_diff
elif not df_src2.empty and not df_tgt2.empty:
df_agg_merge = df_src2.merge(df_tgt2,
indicator=True,
how='outer')
df_agg_merge['src_agg_cnt'] = df_agg_merge['src_agg_cnt'].fillna(0)
df_agg_merge['tgt_agg_cnt'] = df_agg_merge['tgt_agg_cnt'].fillna(0)
df_agg_merge['cnt_diff'] = df_agg_merge['src_agg_cnt'].sub(df_agg_merge['tgt_agg_cnt'])
df_agg_diff = df_agg_merge.loc[lambda x: x['cnt_diff'] != 0].head(100)
return df_agg_diff
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
loging(datetime.datetime.now(), 'agg', sys.exc_info()[1])
return np.nan

请指导我在上面的代码中遗漏了什么。

也许可以试试这个:

if len(df_src2)==0 or len(df_tgt2)==0:
df_agg_diff = pd.DataFrame()
return df_agg_diff
elif len(df_src2)>0 and len(df_tgt2)>0:
df_agg_merge = df_src2.merge(df_tgt2,
indicator=True,
how='outer')

有时,将数据帧的行数作为健全性检查更容易,除非您需要查看数据帧中的值是否明显为null。此外,从技术上讲,您不需要elif条件,因为if条件会返回。如果满足条件,它无论如何都不会评估elif,所以这里没有必要。

if len(df_src2)==0 or len(df_tgt2)==0:
df_agg_diff = pd.DataFrame()
return df_agg_diff
df_agg_merge = df_src2.merge(df_tgt2,
indicator=True,
how='outer')

相关内容

最新更新