Как исправить: невозможно сравнить массив типа [float64] со скалярным типом [bool]


Ошибка, с которой вы можете столкнуться при использовании панд:

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

Эта ошибка обычно возникает, когда вы пытаетесь подмножество DataFrame на основе нескольких условий и не можете заключить круглые скобки вокруг каждого отдельного условия.

В следующем примере показано, как исправить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы создаем следующий DataFrame 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

Теперь предположим, что мы пытаемся использовать функцию .loc для отображения только тех строк, где команда равна «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]

Мы получаем ошибку ValueError , потому что мы не заключали в круглые скобки отдельные условия.

Поскольку оператор & имеет приоритет над оператором == , панды не могут интерпретировать этот оператор в правильном порядке.

Как исправить ошибку

Самый простой способ исправить эту ошибку — просто добавить круглые скобки вокруг отдельных условий следующим образом:

 #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

Обратите внимание, что мы не получаем никаких ValueError и нам удается успешно подмножество DataFrame.

Дополнительные ресурсы

В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python:

Как исправить: столбцы перекрываются, но суффикс не указан
Как исправить: вы пытаетесь объединить столбцы object и int64.
Как исправить: невозможно определить строку с несовпадающими столбцами

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *