Проблема здесь в том, что при создании массива со сложными значениями:
a = np.array([5+6*1j])
Вы создали массив dtype
complex:
a.dtype
# dtype('complex128')
Итак, добавивзначение, которое содержит только действительную часть, оно будет преобразовано в комплексное значение, и поэтому вы будете вставлять число со сложным компонентом, равным 0j
, поэтому:
np.complex(np.nan)
# (nan+0j)
Что объясняет поведение:
a[0] = np.array([np.nan])
print(a)
# [nan+0.j]