Jak naprawić: nie można porównać tablicy wpisanej [float64] z typem skalarnym [bool]


Błąd, który możesz napotkać podczas korzystania z pand, to:

 TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

Ten błąd zwykle występuje, gdy próbujesz podzielić ramkę danych na podzbiór na podstawie wielu warunków i nie umieszczasz nawiasów wokół każdego indywidualnego warunku.

Poniższy przykład pokazuje, jak w praktyce skorygować ten błąd.

Jak odtworzyć błąd

Załóżmy, że tworzymy następującą ramkę danych pandy:

 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

Załóżmy teraz, że spróbujemy użyć funkcji .loc do wyświetlenia tylko tych wierszy, w których drużyna równa się „A”, a pozycja równa się „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]

Otrzymujemy błąd ValueError , ponieważ nie umieściliśmy nawiasów wokół poszczególnych warunków.

Ponieważ operator & ma pierwszeństwo przed operatorem == , pandy nie interpretują tej instrukcji we właściwej kolejności.

Jak naprawić błąd

Najłatwiejszym sposobem naprawienia tego błędu jest po prostu dodanie nawiasów wokół poszczególnych warunków w następujący sposób:

 #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

Należy pamiętać, że nie otrzymaliśmy żadnego błędu ValueError i udało nam się pomyślnie dokonać podzbioru ramki DataFrame.

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak naprawić inne typowe błędy w Pythonie:

Jak naprawić: Kolumny nakładają się, ale nie określono żadnego sufiksu
Jak naprawić: Próbujesz scalić kolumny object i int64
Jak naprawić: Nie można zdefiniować wiersza z niedopasowanymi kolumnami

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *