Mam tablicę liczb zmiennoprzecinkowych (kilka normalnych liczb, kilka nans), która wychodzi z zastosowania na ramce danych pandy.
Z jakiegoś powodu numpy.isnan nie działa w tej tablicy, jednak jak pokazano poniżej, każdy element jest zmiennoprzecinkowy, numpy.isnan działa poprawnie na każdym elemencie, typem zmiennej jest zdecydowanie tablica numpy.
Co się dzieje?!
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
Świetnym zamiennikiem np.isnan () i pd.isnull () jest
for i in range(0,a.shape[0]): if(a[i]!=a[i]): //do something here //a[i] is nan
ponieważ tylko nan nie jest sobie równe.
źródło
import numpy as np; a = np.array([1,2,3, np.nan])
i uruchom kod.Oprócz odpowiedzi @unutbu, możesz wymusić tablicę obiektów pandy numpy na typ natywny (float64), coś wzdłuż linii
import pandas as pd pd.to_numeric(df['tester'], errors='coerce')
Określ błędy = 'coerce', aby wymusić na łańcuchach, których nie można przeanalizować na wartość liczbową, na NaN. Typ kolumny to
dtype: float64
, a następnieisnan
sprawdzenie powinno działaćźródło
unutbu
;)import pandas as pd condition = pd.isnull(data[i][j])
źródło