Поток управления в функции не имеет смысла - установить переменную x
быть nan
, а затем проверить, если это действительно nan
в цикле и установите его в 0. Вы никогда не прикасаться ни проверить любого из элементы массива.
Чтобы правильно преобразовать значения nan
в 0, вы можете просто использовать numpy.nan_to_num
, поскольку он работает с массивами NumPy.
Demo
In[37]: arr
Out[37]:
array([ nan, 19523.32112031, 19738.42763774, 19654.84783027,
119.63673757, 19712.43294378, nan, 20052.36456133,
19846.4815936 , 20041.86766194, 19921.81269442, nan,
20030.50736357])
In[38]: np.nan_to_num(arr)
Out[38]:
array([ 0. , 19523.32112031, 19738.42763774, 19654.84783027,
119.63673757, 19712.43294378, 0. , 20052.36456133,
19846.4815936 , 20041.86766194, 19921.81269442, 0. ,
20030.50736357])
Если вы больше заинтересованы в том, функционирующую версию подхода для обычного списка Python, вы можете попробовать что-то вроде этого, или список понимание как fafl предоставил.
In[39]: list(map(lambda x: 0.0 if math.isnan(x) else x, oldlist))
Out[39]:
[0.0,
19523.3211203121,
19738.4276377355,
19654.8478302742,
119.63673757136,
19712.432943781,
0.0,
20052.3645613346,
19846.4815936009,
20041.8676619438,
19921.8126944154,
0.0,
20030.5073635719]