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


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

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

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

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

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

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

 import pandas as pd

#createDataFrame
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 to 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 to 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 to 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» не имеет атрибута «dataframe»
Как исправить: Ошибка типа: нет числовых данных для построения графика.
Как исправить ошибку KeyError в Pandas

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

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