В работе с библиотекой 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 отфильтрован по нужному условию.
Добавить комментарий