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


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

TypeError :Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]

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

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

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

Предположим, у нас есть следующие Pandas DataFrame:

import pandas as pd

#create DataFrame
df = pd.DataFrame({'team': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
 'points': [18, 22, 19, 14, 14, 11, 20, 28],
 'assists': [5, 7, 7, 9, 12, 9, 9, 4],
 'rebounds': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
print(df)

 team points assists rebounds
0 A 18 5 11
1 A 22 7 8
2 A 19 7 10
3 A 14 9 6
4 B 14 12 6
5 B 11 9 5
6 B 20 9 9
7 B 28 4 12

Теперь предположим, что мы пытаемся отфильтровать DataFrame, чтобы отображались только строки, в которых столбец команды равен «A», а столбец очков больше 15:

#attempt to filter DataFrame
df.loc[df.team == 'A ' & df.points > 15 ]

TypeError :Cannot perform 'rand_' with a dtyped [int64] array and scalar of type [bool]

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

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

Чтобы исправить эту ошибку, нам просто нужно убедиться, что мы заключаем в скобки каждое отдельное условие при выполнении фильтра:

#filter DataFrame
df.loc[(df.team == 'A') & (df.points > 15 )]

 team points assists rebounds
0 A 18 5 11
1 A 22 7 8
2 A 19 7 10

Обратите внимание, что мы можем успешно отфильтровать DataFrame, чтобы показать только те строки, в которых команда равна «А» и где количество баллов больше 15.

Обратите внимание, что нам также нужно заключать в скобки каждое отдельное условие, если мы используем знак или «|». вместо этого оператор:

#filter rows where team is equal to 'A' *or* points is greater than 15
df.loc[(df.team == 'A') | (df.points > 15 )]

team points assists rebounds
0 A 18 5 11
1 A 22 7 8
2 A 19 7 10
3 A 14 9 6
6 B 20 9 9
7 B 28 4 12

Обратите внимание, что мы снова избегаем ошибок.

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

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

Как исправить: модуль «Pandas» не имеет атрибута «фрейм данных»
Как исправить: TypeError: нет числовых данных для построения
Как исправить KeyError в Pandas

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