从2个阵列中删除NaN元素?

时间:2017-06-09 16:33:57

标签: python list

几个星期前我在这里问了一个问题,得到了很好的反馈!我有另一个问题,我有点困惑。我有2个非常大的列表(大小相同),每个列表都有一些np.nan值。这两个纳米值的位置在两个列表之间不相同。我需要遍历第一个列表,并删除其中的nan值,以及第二个列表中的相应值(第一个列表中出现nan值的索引处的值)。然后我需要为第二个列表执行此操作。有关快速,有效的方法的任何提示吗?我最终将处理非常大的数据集。谢谢!

3 个答案:

答案 0 :(得分:2)

我不确定这是多么有效,但您可以使用nansInArray1 = np.isnan(array1)来获取与数组1中np.nan的索引对应的numpy bool数组。然后执行

array1 = array1[~nansInArray1]
array2 = array2[~nansInArray1]

然后重复array2。

同样,我完全不确定这是否有效,我对python很新。

我也假设是array1和array2以及numpy数组。

希望这有帮助! :)

答案 1 :(得分:0)

您可以使用enumarete迭代索引。

for idx, value in enumerate(list):
  if(value=Nan): other_list.remove(idx)
  else: new_filtered_list.add(value)

但这不是一个非常快速的解决方案,并且在迭代它时无法从“列表”中删除,因此您必须创建一个新的。 我认为,如果你正在寻找性能,最好的方法就是简单地使用for循环。

如果你愿意,你可以尝试两种方法并做一个基准测试,但pyhton并不是一种非常快速的语言,如果你需要性能,你应该在C中编写代码并在python代码中使用它。

答案 2 :(得分:0)

检查此链接:-在此线程上提供了第一个答案的实现。 Delete nan AND corresponding elements in two same-length array

这对我有用

indices = np.logical_not(np.logical_or(np.isnan(x), np.isnan(y)))     
indices = np.array(indices)
x = x[indices]
y = y[indices]