Оператори or
і and
python вимагають 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 зазвичай інтерпретує len
GTH контейнерів (наприклад 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