Як виправити в pandas: істинність серії неоднозначна


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

 ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

Ця помилка зазвичай виникає, коли ви намагаєтеся відфільтрувати pandas DataFrame за допомогою слів і та або замість використання символів & та | оператори.

Цей посібник пояснює, як вирішити цю помилку на практиці.

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

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

 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

Тепер припустімо, що ми намагаємося відфільтрувати рядки, де команда дорівнює «А» , а кількість балів менше 20:

 #attempt to filter DataFrame
df[(df[' team '] == ' A ') and (df[' points '] < 20 )]

ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

Або припустімо, що ми намагаємося відфільтрувати рядки, де команда дорівнює «А» або де кількість балів менше 20:

 #attempt to filter DataFrame
df[(df[' team '] == ' A ') or (df[' points '] < 20 )]

ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

В обох сценаріях ми отримуємо помилку, яка говорить про те, що значення істинності ряду неоднозначне.

Як виправити помилку

Щоб уникнути цієї помилки під час фільтрації, нам потрібно переконатися, що ми використовуємо & та | елементів. оператори.

Наприклад, ми можемо використати наступний код для фільтрації рядків, у яких команда дорівнює «А» , а бали менше 20:

 #filter DataFrame
df[(df[' team '] == ' A ') & (df[' points '] < 20 )]

team points assists rebounds
0 A 18 5 11
2 A 19 7 10
3 A 14 9 6

Або ми можемо використати наступний код, щоб відфільтрувати рядки, де команда дорівнює «А» або кількість балів менша за 20:

 #filter DataFrame
df[(df[' team '] == ' A ') | (df[' points '] < 20 )]

        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

В обох сценаріях ми не отримуємо повідомлення про помилку, оскільки використовували & та | елементів. оператори.

Примітка : під час фільтрації pandas DataFrame за кількома умовами важливо включати дужки навколо кожної окремої умови, інакше ви отримаєте повідомлення про помилку.

Додаткові ресурси

У наступних посібниках пояснюється, як виправити інші типові помилки в Python:

Як виправити: модуль «pandas» не має атрибута «dataframe».
Як виправити в Pandas: SettingWithCopyWarning
Як виправити в Pandas: TypeError: немає числових даних для побудови

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

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