Como consertar no pandas: o valor verdade de uma série é ambíguo
Um erro que você pode encontrar em Python é:
ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
a.any() or a.all().
Este erro geralmente ocorre quando você tenta filtrar um DataFrame do pandas usando as palavras e e ou em vez de usar os caracteres & e | os operadores.
Este tutorial explica como resolver esse erro na prática.
Como reproduzir o erro
Suponha que criemos o seguinte DataFrame do pandas:
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
Agora suponha que estamos tentando filtrar linhas onde o time é igual a “A” e os pontos são menores que 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().
Ou suponha que tentamos filtrar linhas onde o time é igual a “A” ou onde os pontos são menores que 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().
Em ambos os cenários, recebemos um erro que nos diz que o valor verdade de uma série é ambíguo.
Como corrigir o erro
Para evitar esse erro ao filtrar, precisamos ter certeza de usar & e | elementos. os operadores.
Por exemplo, podemos usar o código a seguir para filtrar linhas onde a equipe é igual a “A” e os pontos são menores que 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
Ou poderíamos usar o seguinte código para filtrar linhas onde a equipe é igual a “A” ou os pontos são menores que 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
Em ambos os cenários, não recebemos erro, pois usamos & e | elementos. os operadores.
Nota : É importante incluir parênteses em torno de cada condição individual ao filtrar um DataFrame do pandas por múltiplas condições, caso contrário você receberá um erro.
Recursos adicionais
Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:
Como corrigir: o módulo “pandas” não possui o atributo “dataframe”
Como corrigir no Pandas: SettingWithCopyWarning
Como corrigir no Pandas: TypeError: nenhum dado numérico para plotar