Одна ошибка, с которой вы можете столкнуться при использовании 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
Как исправить: не удается установить строку с несовпадающими столбцами