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


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

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

Эта ошибка обычно возникает, когда вы пытаетесь отфильтровать DataFrame pandas, используя слова и и или вместо символов & и | операторы.

В этом руководстве объясняется, как устранить эту ошибку на практике.

Как воспроизвести ошибку

Предположим, мы создаем следующий DataFrame pandas:

 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

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *