Cara memperbaiki: valueerror: tidak dapat menutupi array non-boolean yang berisi nilai na/nan


Kesalahan yang mungkin Anda temui saat menggunakan pandas adalah:

 ValueError : Cannot mask with non-boolean array containing NA / NaN values

Kesalahan ini biasanya terjadi ketika Anda mencoba mencari baris di pandas DataFrame yang berisi string tertentu, tetapi kolom yang Anda cari memiliki nilai NaN.

Contoh berikut menunjukkan cara memperbaiki kesalahan ini dalam praktiknya.

Bagaimana cara mereproduksi kesalahan tersebut

Misalkan kita memiliki panda DataFrame berikut:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B'],
                   ' position ': ['Guard', 'Guard', np. nan , 'Guard', 'Forward'],
                   ' points ': [22, 28, 14, 13, 19]})

#view DataFrame
print (df)

  team position points
0 A Guard 22
1 A Guard 28
2 A NaN 14
3 B Guard 13
4 B Forward 19

Sekarang misalkan kita mencoba mengakses semua baris di DataFrame di mana kolom posisi berisi string “Penjaga”:

 #access all rows where position column contains 'Guard'
df[df[' position ']. str . contains (' Guard ')]

ValueError : Cannot mask with non-boolean array containing NA / NaN values

Kami menerima error karena ada nilai NaN di kolom posisi .

Bagaimana cara memperbaiki kesalahan tersebut

Untuk menghindari kesalahan ini, cukup gunakan argumen na=False di fungsi str.contains() :

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard ', na= False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

Kali ini kita dapat mengakses semua baris yang berisi “Penjaga” di kolom posisi tanpa kesalahan apa pun.

Cara lain untuk menghindari kesalahan ini adalah dengan menggunakan .fillna(False) sebagai berikut:

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard '). fillna ( False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

Sekali lagi kita dapat mengakses semua baris yang berisi “Penjaga” di kolom posisi tanpa kesalahan apa pun.

Sumber daya tambahan

Tutorial berikut menjelaskan cara memperbaiki kesalahan umum lainnya dengan Python:

Cara Memperbaiki KeyError di Pandas
Cara Memperbaiki: ValueError: Tidak dapat mengubah float NaN menjadi int
Cara Memperbaiki: ValueError: Operan tidak dapat disiarkan dengan bentuk

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *