Оператори orі andpython вимагають truth-значень. Бо pandasвони вважаються неоднозначними, тому вам слід використовувати операції "побітові" |(або) або &(і):
result = result[(result['var']>0.25) | (result['var']<-0.25)]
Вони перевантажені для подібних структур даних, щоб отримати елемент or(або and).
Просто додайте ще кілька пояснень до цього твердження:
Виняток , коли ви хочете отримати boolз pandas.Series:
>>> import pandas as pd
>>> x = pd.Series([1])
>>> bool(x)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Те , що ви потрапили був місцем , де оператор неявно перетвориться операнди bool(ви використовували , orале це також відбувається з- за and, ifі while):
>>> x or x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> x and x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> if x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> while x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Крім того , ці 4 заяв є кілька функцій Python , які приховують деякі boolвиклики (наприклад any, all, filter, ...) це звичайно не викликають проблеми з , pandas.Seriesале для повноти картини я хотів згадати це.
У вашому випадку виняток насправді не корисний, оскільки він не згадує правильних альтернатив . Для andі orви можете використовувати (якщо ви хочете стихійне порівняння):
Якщо ви використовуєте операторів, то переконайтеся, що ви правильно встановили дужки через перевагу оператора .
Існує кілька логічних функцій numpi, над якими слід працювати pandas.Series.
Альтернативи, згадані у Винятку, більше підходять, якщо ви стикалися з ним під час ifчи while. Я коротко поясню кожне з них:
Якщо ви хочете перевірити, чи ваша серія порожня :
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
Python зазвичай інтерпретує lenGTH контейнерів (наприклад list, tuple...) , як истинностное значення , якщо воно не має явне логічне тлумачення. Тож якщо ви хочете перевірити як пітон, ви можете зробити: if x.sizeабо if not x.emptyзамість if x.
Якщо ваше Seriesмістить одне і лише одне булеве значення:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
Якщо ви хочете перевірити перший і єдиний елемент вашої серії (наприклад, .bool()але працює навіть для не булевого вмісту):
>>> x = pd.Series([100])
>>> x.item()
100
Якщо ви хочете перевірити, чи всі або будь-які елементи не є нульовими, не порожніми чи не-помилковими:
>>> x = pd.Series([0, 1, 2])
>>> x.all() # because one element is zero
False
>>> x.any() # because one (or more) elements are non-zero
True
|замістьor