Come risolvere in pandas: il valore di verità di una serie è ambiguo


Un errore che potresti riscontrare in Python è:

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

Questo errore si verifica in genere quando si tenta di filtrare un DataFrame panda utilizzando le parole e e o invece di utilizzare i caratteri & e | gli operatori.

Questo tutorial spiega come risolvere questo errore nella pratica.

Come riprodurre l’errore

Supponiamo di creare il seguente DataFrame panda:

 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

Supponiamo ora di provare a filtrare le righe in cui la squadra è uguale ad “A” e i punti sono inferiori a 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().

Oppure supponiamo di provare a filtrare le righe dove la squadra è uguale ad “A” o dove i punti sono inferiori a 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().

In entrambi gli scenari riceviamo un errore che ci informa che il valore di verità di una serie è ambiguo.

Come correggere l’errore

Per evitare questo errore durante il filtraggio, dobbiamo assicurarci di utilizzare & e | elementi. gli operatori.

Ad esempio, possiamo utilizzare il seguente codice per filtrare le righe in cui la squadra è uguale ad “A” e i punti sono inferiori a 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

Oppure potremmo utilizzare il seguente codice per filtrare le righe in cui la squadra è uguale ad “A” o i punti sono inferiori a 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

In entrambi gli scenari non riceviamo un errore poiché abbiamo utilizzato & e | elementi. gli operatori.

Nota : è importante includere parentesi attorno a ogni singola condizione quando si filtra un DataFrame panda in base a più condizioni, altrimenti verrà visualizzato un errore.

Risorse addizionali

I seguenti tutorial spiegano come correggere altri errori comuni in Python:

Come risolvere il problema: il modulo “pandas” non ha l’attributo “dataframe”.
Come risolvere il problema in Panda: SettingWithCopyWarning
Come risolvere il problema in Panda: TypeError: nessun dato numerico da tracciare

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *