Сохранение значения NaN при переходе из списка python в массив numpy?

#python #arrays #numpy

Вопрос:

В моем коде я должен перейти из большого вложенного списка (список python списков python), и в каждом подсписке некоторые записи могут иметь значения numpy NaN. Когда я создаю этот вложенный список, он выглядит примерно так:

 import numpy as np
nested_list = [[np.nan, 19], ['a', np.nan]]
>>> print(nested_list)
[[nan, 19], ['a', nan]]
 

Я ожидаю, что, когда я оцениваю равенство NaN-элемента подсписка по отношению к самому себе, я должен получить False из-за того, что это нулевое значение, которое я делаю:

 >>>print(nested_list[1][1] == nested_list[1][1])
False
 

Теперь я хочу превратить этот вложенный список в массив 2d numpy, но когда я это делаю, значения NaN просто превращаются в строки и не сохраняют свое значение null:

 arr = np.array(list_of_lists)
>>>print(arr)
[['nan' '19']
 ['a' 'nan']]
>>>print(arr[1][1] == arr[1][1])
True
 

Как мне уберечь Нэн от превращения в веревочку?

Комментарии:

1. Зачем вам нужен массив numpy? Почему бы не придерживаться списка, где сочетание типов естественно.

2. @hpaulj У меня был какой-то предыдущий код, написанный, когда объект, с которым я имею дело, с самого начала представлял собой массив numpy, но код, который я пишу сейчас, требует, чтобы я начинал со списка, поэтому я хотел вернуться к тому, с чем код уже знал, как работать.

3. Просто имейте в виду, что массив типов объектов dtype сильно отличается от обычного числового массива.

Ответ №1:

Ты можешь сделать это вот так

 import numpy as np

nested_list = [[np.nan, 19], ['a', np.nan]]
np.array(nested_list, dtype='object')