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


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

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

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

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

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

Предположим, мы создаем следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
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 A G 21
1 A G 30
2 A F 26
3 A C 29
4 B G 14
5 B F 29
6 B F 22
7 B C 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 , потому что мы не заключали в скобки отдельные условия.

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

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

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

#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
Как исправить: не удается установить строку с несовпадающими столбцами

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.