Как исправить в Pandas: истинное значение серии неоднозначно


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

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

Эта ошибка обычно возникает, когда вы пытаетесь отфильтровать кадр данных 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

Теперь предположим, что мы пытаемся отфильтровать строки, в которых команда равна «А», а количество очков меньше 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

Или мы могли бы использовать следующий код для фильтрации строк, в которых команда равна «A» или количество очков меньше 20:

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

 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

В обоих сценариях мы не получаем ошибку, так как использовали операторы & и | операторы.

Примечание.Важно заключать в скобки каждое отдельное условие при фильтрации кадра данных pandas по нескольким условиям, иначе вы получите сообщение об ошибке.

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

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

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

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