Одна ошибка, с которой вы можете столкнуться в 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: нет числовых данных для построения