为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

手掌心 2023-12-09 16:53:58
我使用以下条件语句来定义metric:metric = "FAIL" if ((self.Mean <= -20.0) & (self.area_ratio>= 0.8)) else "PASS"有时,self.area_ratio =“NA”。这当然给了我错误: TypeError: '>=' notsupported Between Examples of 'str' and 'float'.如何保持此条件语句格式来定义metric,同时支持 self.area_ratio 可以等于“NA”或可以等于整数?如果self.area_ratio =“NA”,则度量应等于“PASS”。
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

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

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

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

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


查看完整回答
反对 回复 2023-12-09
?
繁星淼淼

TA贡献1775条经验 获得超11个赞

这就是您所需要的。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但是如果有任何其他非数字值,这将引发您不处理的异常。


查看完整回答
反对 回复 2023-12-09
?
慕田峪9158850

TA贡献1794条经验 获得超7个赞

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

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


查看完整回答
反对 回复 2023-12-09
  • 3 回答
  • 0 关注
  • 115 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信