np.array([2,1,0,7]).dtype
# => dtype('int64')
np.array([2,1,np.nan,7]).dtype
# => dtype('float64')
Целые числа не имеют значения NaN; np.nan
- это число с плавающей точкой, и его нельзя поместить в целочисленный массив.
roganjo sh побеждает меня в решении, хотя: P (то есть преобразовать в массив с плавающей точкой, прежде чем пытаться поместить np.nan
там). С разрешения roganjo sh:
a = np.array([2,1,0,7])
a = a.astype(np.float64)
a[a == 0] = np.nan
a
# => array([ 2., 1., nan, 7.])
Причина, по которой преобразование в list
работает, заключается в том, что списки, в отличие от массивов numpy, не против смешивать типы элементов. Когда вы преобразуете смешанный список целых чисел и чисел с плавающей точкой, numpy будет предполагать, что вам нужен массив с плавающей точкой.