Array numpy saya digunakan np.nan
untuk menunjukkan nilai yang hilang. Saat saya mengulangi kumpulan data, saya perlu mendeteksi nilai yang hilang tersebut dan menanganinya dengan cara khusus.
Saya menggunakan secara naif numpy.isnan(val)
, yang berfungsi dengan baik kecuali jika val
tidak termasuk dalam subset tipe yang didukung oleh numpy.isnan()
. Misalnya, data yang hilang dapat terjadi di bidang string, dalam hal ini saya mendapatkan:
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
Selain menulis pembungkus mahal yang menangkap pengecualian dan pengembalian False
, adakah cara untuk menangani ini dengan elegan dan efisien?
pandas
haspandas.isnull()
: Saya tidak yakin apakah itu memenuhi kebutuhan Anda, jadi beberapa contoh data mungkin bagus.pandas.isnull()
sepertinya bekerja dengan sempurna. Satu-satunya tipe data yang saat ini saya hadapinumpy.isnan()
adalah pemutusan string, danpandas.isnull()
menanganinya dengan baik. Bahkan, tampaknya menangani dengan baik semua objek sewenang-wenang yang saya lemparkan ke sana. Apakah ada masalah khusus yang Anda khawatirkan? Jika tidak, Anda mungkin ingin mengirimkan komentar Anda sebagai jawaban yang lengkap, karena tampaknya seperti jawaban kanonik, setidaknya untuk pengguna pandas.Jawaban:
pandas.isnull()
(jugapd.isna()
, dalam versi yang lebih baru) memeriksa nilai yang hilang di array numerik dan string / objek. Dari dokumentasi, ia memeriksa:Contoh cepat:
Ide menggunakan
numpy.nan
untuk merepresentasikan nilai yang hilang adalah sesuatu yangpandas
diperkenalkan, itulah mengapapandas
memiliki alat untuk menghadapinya.Datetimes juga (jika Anda menggunakan,
pd.NaT
Anda tidak perlu menentukan dtype)sumber
Apakah tipe Anda benar-benar sewenang-wenang? Jika Anda tahu itu hanya akan menjadi int float atau string yang bisa Anda lakukan
dengan asumsi itu dibungkus dengan numpy, itu akan selalu memiliki tipe d dan hanya float dan kompleks yang dapat menjadi NaN
sumber
dtype
. Anda mungkin harus melakukannyatype(val) == 'float'
type(val) == float and np.isnan(val)
- bekerja untuk saya