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