繁体   English   中英

使用比较运算符处理条件语句中的 NA 值

[英]Dealing with NA values in a conditional statement using comparison operators

我使用以下条件语句来定义metric

metric = "FAIL" if ((self.Mean <= -20.0) & (self.area_ratio>= 0.8)) else "PASS"

有时, self.area_ratio = "NA"。

这当然给了我错误:TypeError: '>=' not supported between 'str' and 'float'.

我怎样才能保持这个条件语句格式来定义metric ,同时支持 self.area_ratio 可以等于“NA”或可以等于一个整数? 如果self.area_ratio = "NA",度量应该等于 "PASS"。

谢谢!

这是你需要的。 如果self.area_ratio不是数字,则会抛出异常。 因此,您只需捕获该异常并将metric设置为PASS

try:
    metric = "FAIL" if (self.area_ratio >= 0.8) else "PASS"
except TypeError as ex:
    metric = "PASS"

如果你想对其他非数字值做一些不同的事情,那么你可以在except子句中加入更多的逻辑来处理非数字值之间的区分行为。

如果您确定NA是您将看到的唯一非数字值,则可以将其添加到条件语句中,如下所示:

metric = "PASS" if self.area_ratio == 'NA' or (self.area_ratio < 0.8) else "FAIL"

但是如果self.area_ratio是任何其他非数字值,那将抛出一个你没有处理的异常。

如果您使用or代替and ,结果会更容易。 &用于位操作,所以这是您的主要问题。

假设这些是您将获得的仅有的两个值(浮点数或字符串“NA”),您可以这样做:

metric = "PASS" if self.area_ratio == "NA" or self.area_ratio >= 0.8 else "FAIL"

这不是一种超级可靠的方法,但是由于您已经在同一个变量中混合了类型......

 metric = "PASS" if isinstance(self.area_ratio, str) else ("FAIL" if ((self.area_ratio != "NA") & (self.area_ratio>= 0.8)) else "PASS")

只要每个字符串都通过,它也可以工作,但我不建议在一行中进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM