Saya memiliki array float (beberapa angka normal, beberapa nans) yang keluar dari aplikasi pada pandas dataframe.
Untuk beberapa alasan, numpy.isnan gagal pada array ini, namun seperti yang ditunjukkan di bawah ini, setiap elemen adalah float, numpy.isnan berjalan dengan benar pada setiap elemen, jenis variabelnya pasti array numpy.
Apa yang sedang terjadi?!
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
Pengganti yang bagus untuk np.isnan () dan pd.isnull () adalah
for i in range(0,a.shape[0]): if(a[i]!=a[i]): //do something here //a[i] is nan
karena hanya nan tidak sama dengan dirinya sendiri.
sumber
import numpy as np; a = np.array([1,2,3, np.nan])
dan jalankan kode Anda.Di atas jawaban @unutbu, Anda bisa memaksa larik objek numpy panda ke tipe asli (float64), sesuatu di sepanjang garis
import pandas as pd pd.to_numeric(df['tester'], errors='coerce')
Tentukan error = 'coerce' untuk memaksa string yang tidak dapat diurai menjadi nilai numerik menjadi NaN. Jenis kolom akan menjadi
dtype: float64
, dan kemudianisnan
pemeriksaan harus berfungsisumber
unutbu
;)import pandas as pd condition = pd.isnull(data[i][j])
sumber