如何解决跳过 NaN 值的列表理解
我知道已经有类似的问题了 (List comprehension that ignores NaN) 但解决方案不适合我的情况。
我有一个元组列表。我正在使用列表理解从这个元组列表中生成一个子元组列表。根据我读入的数据文件,有时我有 NaN (np.nan
) 值。在这些情况下,我的列表理解会返回 nans (nan,nan)
的元组,但我希望它没有。
以下是我尝试过的示例。它没有给我我想要的输出,但也没有给出错误:
list_values =
[('A',1.,2.,1),('B',3.,4.,('C',5.,6.,('D',nan,('E',('F',1)])
我认为这会奏效,但没有:
pairs = [tuple((x[1] + x[3],x[2] + x[3])) for x in list_values if x[1] is not np.nan]
它返回这个:
[(2.0,3.0),(4.0,5.0),(6.0,7.0),(nan,nan),nan)]
而我想:
[(2.0,7.0)]
我不知道为什么我的 if 条件什么都不做。感谢您的任何见解,谢谢!
解决方法
is not np.nan
不是您进行 NaN 检查的方式。这是对特定对象 np.nan
的身份检查,大多数 NaN 不会是该特定对象。
math.isnan
是 NaN 检查,您可以使用 genexp 将该检查应用于 x
的元素。 (此外,您不需要对元组调用 tuple
。)
pairs = [(x[1] + x[3],x[2] + x[3]) for x in list_values
if all(not math.isnan(elem) for elem in x[1:])]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。