Como corrigir: não é possível comparar uma matriz digitada [float64] com um tipo escalar [bool]
Um erro que você pode encontrar ao usar pandas é:
TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]
Este erro normalmente ocorre quando você tenta criar um subconjunto de um DataFrame com base em várias condições e não consegue colocar parênteses em torno de cada condição individual.
O exemplo a seguir mostra como corrigir 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'], ' position ': ['G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'], ' points ': [21, 30, 26, 29, 14, 29, 22, 16]}) #view DataFrame print (df) team position points 0 AG 21 1 AG 30 2 AF26 3AC 29 4 BG 14 5 BF 29 6 BF 22 7 BC 16
Agora suponha que tentamos usar a função .loc para exibir apenas as linhas onde equipe é igual a “A” e posição é igual a “G”:
#attempt to only show rows where team='A' and position='G'
df. loc [df. team == ' A ' & df. position == ' G ']
TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]
Recebemos um ValueError porque não colocamos parênteses nas condições individuais.
Como o operador & tem precedência sobre o operador == , os pandas não conseguem interpretar esta instrução na ordem correta.
Como corrigir o erro
A maneira mais fácil de corrigir esse erro é simplesmente adicionar parênteses em torno das condições individuais, como segue:
#only show rows where team='A' and position='G'
df. loc [(df. team == ' A ') & (df. position == ' G ')]
team position points
0 A G 21
1 A G 30
Observe que não recebemos nenhum ValueError e conseguimos criar um subconjunto do DataFrame com êxito.
Recursos adicionais
Os tutoriais a seguir explicam como corrigir outros erros comuns em Python:
Como corrigir: as colunas se sobrepõem, mas nenhum sufixo é especificado
Como corrigir: você está tentando mesclar colunas object e int64
Como corrigir: não é possível definir uma linha com colunas incompatíveis