So beheben sie: valueerror: maskierung mit einem nicht-booleschen array mit na/nan-werten nicht möglich


Ein Fehler, der bei der Verwendung von Pandas auftreten kann, ist:

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

Dieser Fehler tritt normalerweise auf, wenn Sie versuchen, Zeilen in einem Pandas-DataFrame zu finden, die eine bestimmte Zeichenfolge enthalten, die gesuchte Spalte jedoch NaN-Werte enthält.

Das folgende Beispiel zeigt, wie dieser Fehler in der Praxis behoben werden kann.

So reproduzieren Sie den Fehler

Angenommen, wir haben den folgenden Pandas-DataFrame:

 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

Nehmen wir nun an, wir versuchen, auf alle Zeilen im DataFrame zuzugreifen, in denen die Positionsspalte die Zeichenfolge „Guard“ enthält:

 #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

Wir erhalten eine Fehlermeldung, weil in der Positionsspalte ein NaN-Wert vorhanden ist.

So beheben Sie den Fehler

Um diesen Fehler zu vermeiden, verwenden Sie einfach das Argument na=False in der Funktion 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

Dieses Mal können wir fehlerfrei auf alle Zeilen zugreifen, die „Guard“ in der Positionsspalte enthalten.

Eine andere Möglichkeit, diesen Fehler zu vermeiden, besteht darin , .fillna(False) wie folgt zu verwenden:

 #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

Wir können wieder fehlerfrei auf alle Zeilen zugreifen, die „Guard“ in der Positionsspalte enthalten.

Zusätzliche Ressourcen

Die folgenden Tutorials erklären, wie Sie andere häufige Fehler in Python beheben:

So beheben Sie KeyError in Pandas
So beheben Sie: ValueError: Float NaN kann nicht in int konvertiert werden
So beheben Sie: ValueError: Operanden konnten nicht mit Formen übertragen werden

Einen Kommentar hinzufügen

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