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

Add a Comment

O seu endereço de email não será publicado. Campos obrigatórios marcados com *