Cara menghapus semua baris dalam numpy.ndarray yang berisi nilai non-numerik


95

Pada dasarnya, saya melakukan beberapa analisis data. Saya membaca dalam kumpulan data sebagai numpy.ndarray dan beberapa nilai hilang (baik dengan tidak berada di sana, berada NaN, atau dengan string yang ditulis " NA").

Saya ingin membersihkan semua baris yang berisi entri seperti ini. Bagaimana cara melakukannya dengan ndarray numpy?

Jawaban:


164
>>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
array([[  1.,   2.,   3.],
       [  4.,   5.,  nan],
       [  7.,   8.,   9.]])

>>> a[~np.isnan(a).any(axis=1)]
array([[ 1.,  2.,  3.],
       [ 7.,  8.,  9.]])

dan menetapkan kembali ini ke a.

Penjelasan: np.isnan(a)mengembalikan larik serupa dengan Truewhere NaN, di Falsetempat lain. .any(axis=1)mengurangi m*narray menjadi ndengan oroperasi logis pada seluruh baris, ~membalikkan True/Falsedan a[ ]memilih hanya baris dari array asli, yang ada Truedi dalam tanda kurung.


11
np.isfinitejuga berguna dalam kasus ini, serta saat Anda ingin menyingkirkan ±Infnilai. Itu tidak memerlukan ~, karena mengembalikan true hanya untuk real terbatas.
n nothing101

7
@ naught101 Anda juga perlu mengubah anyke all. Karena Anda ingin memilih baris di mana "semua terbatas", daripada memilih baris di mana "tidak ada nan".
AnnanFay
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.