Die or
und and
Python-Anweisungen erfordern truth
-Werten. Für pandas
diese gelten als mehrdeutig so sollten Sie „bitweise“ |
(oder) oder &
(und) Operationen verwenden:
result = result[(result['var']>0.25) | (result['var']<-0.25)]
Diese sind für diese Art von Datenstrukturen überlastet die elementweise or
(oder and
) zu erhalten .
einfach etwas mehr Erklärung zu dieser Aussage hinzuzufügen:
Die Ausnahme wird ausgelöst, wenn Sie die bool
eines pandas.Series
erhalten möchten:
>>> 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().
Was Sie schlagen war ein Ort, an dem der Operator implizit konvertierte die Operanden zu bool
(Sie verwendeten or
, aber es passiert auch für and
, if
und 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().
Neben diesen vier Aussagen mehrere Python-Funktionen sind, die einige bool
Anrufe (wie any
, all
, filter
, ...) diese sind in der Regel nicht problematisch mit pandas.Series
aber der Vollständigkeit halber verstecken wollte ich um diese zu erwähnen.
In Ihrem Fall ist die Ausnahme nicht wirklich hilfreich, weil es nicht die richtigen Alternativen nicht erwähnt.Für and
und or
Sie verwenden können (wenn Sie Element weise Vergleiche wollen):
numpy.logical_or
:
>>> import numpy as np
>>> np.logical_or(x, y)
oder einfach die |
Betreiber:
>>> x | y
numpy.logical_and
:
>>> np.logical_and(x, y)
oder einfach die &
Betreiber:
>>> x & y
Wenn Sie die Operatoren sind dann stellen Sie sicher, dass Sie Ihre Klammer richtig wegen the operator precedence gesetzt.
Es gibt several logical numpy functions die sollte arbeiten auf pandas.Series
.
Die Alternativen in der Ausnahme erwähnt werden, sind besser geeignet, wenn Sie es auf, wenn if
oder while
tun. Ich werde in Kürze jede dieser erklären:
Wenn Sie möchten, zu überprüfen, ob Ihr Series leer ist:
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
Python normalerweise interpretiert die len
gth von Containern (wie list
, tuple
, ...) als Wahrheitswert, wenn es keine explizite boolesche Interpretation gibt. Also, wenn Sie die Python-artige Prüfung möchten, könnten Sie tun: if x.size
oder if not x.empty
anstelle von if x
.
Wenn Ihre Series
enthält ein und nur ein Booleschen Wert:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
Wenn Sie das erste und einziges Element Ihre Serie (wie .bool()
aber auch für nicht boolean funktioniert überprüfen mögen Inhalt):
>>> x = pd.Series([100])
>>> x.item()
100
wenn Sie, wenn überprüfen möchten ein ll oder jeder Artikel ist nicht Null ist, nicht leer oder nicht-False:
>>> 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
Sie sollten mehr Kontext hinzufügen. Ich verstehe nicht, was das Ergebnis ist und was du zu tun versuchst. – kingledion
Verwenden Sie '|' anstelle von 'oder' – MaxU