Oplossing: valueerror: kan niet maskeren met een niet-booleaanse array die na/nan-waarden bevat


Een fout die u kunt tegenkomen bij het gebruik van panda’s is:

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

Deze fout treedt meestal op wanneer u rijen in een Panda DataFrame probeert te vinden die een bepaalde tekenreeks bevatten, maar de kolom die u zoekt bevat NaN-waarden.

Het volgende voorbeeld laat zien hoe u deze fout in de praktijk kunt corrigeren.

Hoe de fout te reproduceren

Stel dat we de volgende panda’s DataFrame hebben:

 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

Stel nu dat we proberen toegang te krijgen tot alle rijen in het DataFrame waar de positiekolom de string “Guard” bevat:

 #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

We ontvangen een foutmelding omdat er een NaN-waarde in de positiekolom staat.

Hoe u de fout kunt oplossen

Om deze fout te voorkomen, gebruikt u eenvoudig het argument na=False in de functie 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

Deze keer hebben we zonder fouten toegang tot alle rijen met „Bewaker“ in de positiekolom .

Een andere manier om deze fout te voorkomen is door .fillna(False) als volgt te gebruiken:

 #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

Opnieuw hebben we zonder fouten toegang tot alle rijen met „Bewaker“ in de positiekolom .

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende fouten in Python kunt oplossen:

Hoe KeyError in Panda’s te repareren
Oplossing: ValueError: Kan float NaN niet naar int converteren
Oplossing: ValueError: Operanden konden niet worden uitgezonden met vormen

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert