Изменить nan на None

Как заменить nan на None в списке q = [1,nan,nan]?

q = [None if i == nan else i for i in q]

Так не работает и nan = None тоже не выходит.


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Для чисел выражение i == i ложно в том случае когда i имеет значение nan. Во всех остальных случаях оно истинно.

https://ru.wikipedia.org/wiki/NaN#Свойства:

NaN не равен ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не очевидных, способов проверки результата на NaN — это сравнение полученной величины с самой собой.

q = [i if i == i else None for i in q]

Если вы хотите чтобы ваш код легко читался, то лучше писать более явно:

import math

q = [i if math.isnan(i) else None for i in q]
→ Ссылка