Як виправити: неможливо порівняти масив, набраний [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
Як виправити: неможливо визначити рядок із невідповідними стовпцями