У меня есть массив чисел с плавающей запятой (некоторые нормальные числа, некоторые nans), который выходит из приложения на фреймворке pandas.
По какой-то причине numpy.isnan не работает в этом массиве, однако, как показано ниже, каждый элемент является float, numpy.isnan работает правильно для каждого элемента, тип переменной определенно является массивом numpy.
В чем дело?!
set([type(x) for x in tester])
Out[59]: {float}
tester
Out[60]:
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan], dtype=object)
set([type(x) for x in tester])
Out[61]: {float}
np.isnan(tester)
Traceback (most recent call last):
File "<ipython-input-62-e3638605b43c>", line 1, in <module>
np.isnan(tester)
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
set([np.isnan(x) for x in tester])
Out[65]: {False, True}
type(tester)
Out[66]: numpy.ndarray
Отличная замена для np.isnan () и pd.isnull () -
for i in range(0,a.shape[0]): if(a[i]!=a[i]): //do something here //a[i] is nan
поскольку только nan не равен самому себе.
источник
import numpy as np; a = np.array([1,2,3, np.nan])
и запустите свой код.В дополнение к ответу @unutbu вы можете принудить массив объектов pandas numpy к собственному типу (float64), что-то в строке
import pandas as pd pd.to_numeric(df['tester'], errors='coerce')
Укажите errors = 'coerce', чтобы строки, которые нельзя проанализировать до числового значения, стали NaN. Тип столбца будет
dtype: float64
, а затемisnan
проверка должна работатьисточник
unutbu
;)import pandas as pd condition = pd.isnull(data[i][j])
источник