Jak naprawić: błąd wartości: nie można zamaskować tablicą inną niż logiczna zawierającą wartości na/nan
Błąd, który możesz napotkać podczas korzystania z pand, to:
ValueError : Cannot mask with non-boolean array containing NA / NaN values
Ten błąd zwykle występuje, gdy próbujesz znaleźć wiersze w ramce danych pandy zawierające określony ciąg, ale przeszukiwana kolumna ma wartości NaN.
Poniższy przykład pokazuje, jak w praktyce skorygować ten błąd.
Jak odtworzyć błąd
Załóżmy, że mamy następującą ramkę DataFrame pand:
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
Załóżmy teraz, że próbujemy uzyskać dostęp do wszystkich wierszy w ramce danych, gdzie kolumna pozycji zawiera ciąg „Strażnik”:
#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
Otrzymujemy błąd, ponieważ w kolumnie pozycji znajduje się wartość NaN.
Jak naprawić błąd
Aby uniknąć tego błędu, po prostu użyj argumentu na=False w funkcji 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
Tym razem możemy uzyskać dostęp do wszystkich wierszy zawierających „Straż” w kolumnie pozycji bez żadnych błędów.
Innym sposobem uniknięcia tego błędu jest użycie .fillna(False) w następujący sposób:
#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
Po raz kolejny możemy uzyskać dostęp do wszystkich wierszy zawierających „Straż” w kolumnie pozycji bez żadnych błędów.
Dodatkowe zasoby
Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:
Jak naprawić błąd KeyError w Pandach
Jak naprawić: ValueError: Nie można przekonwertować float NaN na int
Jak naprawić: Błąd wartości: Nie można rozgłaszać argumentów z kształtami