2015-08-07 3 views
2

Для регрессий в sklearn у меня есть список x и список y. К сожалению, у этих списков есть пробелы/NaN. NaN сбой любого анализа, поэтому мне нужно удалить каждый NaN и его соответствующий номер в другом списке (чтобы сохранить связь между и y[0] и т. Д.)Удаление элементов, соответствующих nan в одном списке из другого списка

Что такое элегантный способ найти это? Есть ли альтернатива петлям?

+1

Я думаю длины такие же правильно? – bagrat

+0

@ n9code справа. Первоначально они одинаковы. Если я удалю nan в одном списке, я также должен удалить тот, у кого есть тот же индекс, в другом списке, поэтому длины всегда будут одинаковыми. –

+0

- строка '' nan'' string ''nan'' или Python' None'? – bagrat

ответ

1

Попробуйте следующее, используя Python встроенную функцию zip и filter:

def filter_nans(x, y): 
    filtered = filter(lambda o: not math.isnan(o[0]) and not math.isnan(o[1]), zip(x, y))  
    return [el[0] for el in filtered], [el[1] for el in filtered] 

Так, например:

x = [1, 2, 3, 4, 5, 6, None, 8] 
y = [10, 'not a number', 30, 40, 50, 60, 70, 80] 

x, y = filter_nans(x, y) 

>>> x 
[1, 3, 4, 5, 6, 8] 
>>> y 
[10, 30, 40, 50, 60, 80] 
+1

Я думаю, вам может понадобиться отфильтровать элементы, которые не являются номерами (неясно, являются ли они строками, содержащими числа или простые целые числа). – Pynchia

+3

Lambda выражение должно использовать math.isnan, чтобы проверить, являются ли значения NaN. –

+0

@MaciejLach, Pynchia Спасибо большое, обновлено. – bagrat

Смежные вопросы