Найти в Дзене
Секреты python

NaN, None, NA: отличия и секреты [часть 1]

В python отсутствие значений у переменной/объекта может отражаться как NaN, <NA> или None. Попробуем разобраться, чем они различаются и зачем нужны (см. табл. 1).

табл. 1
табл. 1

None - это объект класса NoneType, который встроен в python и может использоваться без импорта иных библиотек. None показывает отсутствие значения или состояния у объекта. Поскольку это объект нечислового типа, его обработка замедляет работу кода при больших объемах данных по сравнению с nan и NA.

Пример проверки переменной на отсутствие значения (None) для типа str (текстовое значение).

value = None

вариант 1

if isinstance(value, (str, type(None))):
...

вариант 2

If value is None or isinstance(value, str):
...

NaN относится к вещественным числам класса float (стандарт IEEE 754) и используется в т. ч. в библиотеках math (math.nan), numpy (numpy.nan).

NA совместим с NaN и используется в библиотеке pandas (pandas.NA) для работы с большими наборами данных.

Давайте посмотрим на табл. 2 (ниже).

Посмотрите, как заметно отличается None от др. типов, т.к. относится к др. классу объектов.

табл. 2
табл. 2

Еще несколько интересных моментов на примере float('nan')

-3

Что означает этот код:

1. float('nan') == float('nan') - объекты НЕ совпадают по значению;

2. float('nan') is float('nan') - объекты НЕ совпадают по указателю;

3. id(float('nan')) == id(float('nan')) - адрес в памяти одинаковый.

Вот такой казус. Почему так?

Если наберется 10 лайков, мы опубликуем объяснение и продолжение статьи.

#питон #python #python3 #pythonснуля #pythonсекреты #секреты #технологии