Jak naprawić w pandach: wartość logiczna serii jest niejednoznaczna


Błąd, który możesz napotkać w Pythonie to:

 ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

Ten błąd zwykle występuje, gdy próbujesz odfiltrować ramkę danych pandy przy użyciu słów i i lub zamiast znaków & i | operatorzy.

W tym samouczku wyjaśniono, jak w praktyce rozwiązać ten błąd.

Jak odtworzyć błąd

Załóżmy, że tworzymy następującą ramkę danych pandy:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
print (df)

  team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
4 B 14 12 6
5 B 11 9 5
6 B 20 9 9
7 B 28 4 12

Załóżmy teraz, że próbujemy filtrować wiersze, w których drużyna jest równa „A” , a liczba punktów jest mniejsza niż 20:

 #attempt to filter DataFrame
df[(df[' team '] == ' A ') and (df[' points '] < 20 )]

ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

Załóżmy też, że próbujemy filtrować wiersze, w których drużyna ma liczbę „A” lub których liczba punktów jest mniejsza niż 20:

 #attempt to filter DataFrame
df[(df[' team '] == ' A ') or (df[' points '] < 20 )]

ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

W obu scenariuszach pojawia się błąd informujący nas, że wartość logiczna serii jest niejednoznaczna.

Jak naprawić błąd

Aby uniknąć tego błędu podczas filtrowania, musimy upewnić się, że używamy & i | elementy. operatorzy.

Na przykład możemy użyć poniższego kodu do filtrowania wierszy, w których drużyna ma wartość „A” , a liczba punktów jest mniejsza niż 20:

 #filter DataFrame
df[(df[' team '] == ' A ') & (df[' points '] < 20 )]

team points assists rebounds
0 A 18 5 11
2 A 19 7 10
3 A 14 9 6

Możemy też użyć poniższego kodu do filtrowania wierszy, w których drużyna ma wartość „A” lub liczba punktów jest mniejsza niż 20:

 #filter DataFrame
df[(df[' team '] == ' A ') | (df[' points '] < 20 )]

        team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
4 B 14 12 6
5 B 11 9 5

W obu scenariuszach nie pojawia się błąd, ponieważ użyliśmy & i | elementy. operatorzy.

Uwaga : ważne jest, aby podczas filtrowania ramki danych pandy według wielu warunków uwzględnić nawiasy wokół każdego warunku, w przeciwnym razie pojawi się błąd.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:

Jak naprawić: moduł „pandy” nie ma atrybutu „dataframe”.
Jak naprawić w Pandach: SettingWithCopyWarning
Jak naprawić błąd w Pandach: TypeError: Brak danych numerycznych do wykreślenia

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *