Як виправити: неможливо порівняти масив, набраний [float64], зі скалярним типом [bool]


Помилка, з якою ви можете зіткнутися під час використання панд:

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

Ця помилка зазвичай виникає, коли ви намагаєтеся створити підмножину DataFrame на основі кількох умов і не встановлюєте дужки навколо кожної окремої умови.

У наступному прикладі показано, як виправити цю помилку на практиці.

Як відтворити помилку

Припустімо, що ми створюємо такі панди DataFrame:

 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 , щоб відобразити лише ті рядки, де team дорівнює “A”, а position дорівнює “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
Як виправити: неможливо визначити рядок із невідповідними стовпцями

Додати коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *