繁体   English   中英

python元组删除nan

[英]python tuple remove nan

我有一个包含元组的列表。 我需要删除任何包含 nan 的元组。 我怎样才能做到这一点?

nan 的类型是 math.isnan。 它返回真。

math.isnan(tmp[1][1][1])

我试过这个,但它不起作用:

import math
res = [t for t in tmp if not any(isinstance(n, float) and float('nan') for n in t)]
print(res)

我也试过这个,但它不起作用:

nans = {np.nan, math.nan, float('nan')}
[x for x in tmp if not nans.intersection(x)] 

这是一个示例元组

tmp = [[(0, 1.0),
  (5, nan),
  (10, 1.0),
  (15, nan),
  (20, 1.0),
  (25, nan),
  (30, 1.0),
  (35, nan),
  (40, 0.9808612440191388),
  (45, nan),
  (50, 0.9719298245614035),
  (55, nan),
  (60, 0.9712918660287081),
  (65, nan),
  (70, 0.8947368421052632),
  (75, nan),
  (80, 0.956140350877193),
  (85, nan),
  (90, 0.6140350877192983)],
 [(0, 0.9635627530364372),
  (5, nan),
  (10, 1.0),
  (15, nan),
  (20, 0.9924812030075187),
  (25, nan),
  (30, 1.0),
  (35, nan),
  (40, 0.9808612440191388),
  (45, nan),
  (50, 0.9508771929824561),
  (55, nan),
  (60, 0.9617224880382775),
  (65, nan),
  (70, 0.8173374613003096),
  (75, nan),
  (80, 0.8464912280701754),
  (85, nan),
  (90, 0.5614035087719298)]]

您可以使用嵌套列表理解来做到这一点。 迭代列表的每个子列表,迭代每个元组,检查元组是否包含nan

[[tup for tup in sublist if not any(map(math.isnan, tup))] for sublist in tmp]
# returns:
[[(0, 1.0),
  (10, 1.0),
  (20, 1.0),
  (30, 1.0),
  (40, 0.9808612440191388),
  (50, 0.9719298245614035),
  (60, 0.9712918660287081),
  (70, 0.8947368421052632),
  (80, 0.956140350877193),
  (90, 0.6140350877192983)],
 [(0, 0.9635627530364372),
  (10, 1.0),
  (20, 0.9924812030075187),
  (30, 1.0),
  (40, 0.9808612440191388),
  (50, 0.9508771929824561),
  (60, 0.9617224880382775),
  (70, 0.8173374613003096),
  (80, 0.8464912280701754),
  (90, 0.5614035087719298)]]

暂无
暂无

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

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