07 Июл 2023
2 мин
568

Разбираемся с ошибкой «Truth value of a Series is ambiguous»

В работе с библиотекой pandas в Python часто возникает ситуация, когда нужно отфильтровать DataFrame по определенному условию. Например, могут понадобиться

Visual representation of filtering data in a pandas DataFrame.

Содержание

В работе с библиотекой pandas в Python часто возникает ситуация, когда нужно отфильтровать DataFrame по определенному условию. Например, могут понадобиться все строки, где значение в определенной колонке выходит за пределы заданного диапазона. Интуитивно кажется, что для реализации такого условия достаточно использовать логическую операцию «или» (or), как это делается в Python.

df = df[(df['col'] < -0.25) or (df['col'] > 0.25)]

Однако, при попытке выполнить такой код, Python выдает ошибку: «Truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()». Что она означает и как с ней справиться?

Ошибка говорит о том, что не ясно, как интерпретировать логическое значение всего объекта Series. В Python операторы and и or ожидают получить одно булево значение с каждой стороны, но в случае с pandas Series с каждой стороны есть целый набор значений. И Python не знает, что делать дальше.

Поэтому в pandas для подобных ситуаций предусмотрены специальные операторы & и |, которые выполняют поэлементные логические операции «и» и «или» соответственно. Кроме того, при использовании этих операторов необходимо каждое условие оборачивать в круглые скобки, чтобы избежать проблем с приоритетом операций.

Исправленный код будет выглядеть так:

df = df[(df['col'] < -0.25) | (df['col'] > 0.25)]

Теперь код работает корректно, и DataFrame отфильтрован по нужному условию.

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