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

Add a Comment

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