Instrukcje ori andpython wymagają truthwartości -values. Ponieważ pandassą one uważane za niejednoznaczne, dlatego należy stosować operacje „bitowe” |(lub) lub &(i):
result = result[(result['var']>0.25) | (result['var']<-0.25)]
Są one przeciążone dla tego rodzaju struktur danych, aby uzyskać element or(lub and).
Aby dodać więcej wyjaśnień do tego oświadczenia:
Wyjątkiem jest generowany, gdy chcesz uzyskać booltematyce 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().
Co trafisz był miejscem, gdzie operator niejawnie konwertowane do argumentów bool(użyłeś orale zdarza się również and, ifi 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().
Oprócz tych 4 sprawozdania istnieje kilka funkcji Pythona, który ukryć niektóre boolpołączenia (jak any, all, filter, ...) nie są normalnie problematyczne pandas.Series, ale dla kompletności chciałem wspomnieć nich.
W twoim przypadku wyjątek nie jest tak naprawdę pomocny, ponieważ nie wspomina o odpowiednich alternatywach . Do andi ormożesz użyć (jeśli chcesz porównania elementarne):
Jeśli używasz operatorów, upewnij się, że poprawnie ustawiłeś nawias ze względu na pierwszeństwo operatora .
Istnieje kilka logicznych funkcji numpy, które powinny działać pandas.Series.
Alternatywy wymienione w wyjątku są bardziej odpowiednie, jeśli napotkałeś je podczas wykonywania iflub while. Wkrótce wyjaśnię każde z nich:
Jeśli chcesz sprawdzić, czy Twoja seria jest pusta :
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
Python zwykle interpretuje length kontenerów (jak list, tuple...) jako wartość prawdy, jeśli nie ma wyraźnej interpretacji boolowskiej. Więc jeśli chcesz sprawdzić jak w python, możesz zrobić: if x.sizelub if not x.emptyzamiast if x.
Jeśli Serieszawiera jedną i tylko jedną wartość logiczną:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
Jeśli chcesz sprawdzić pierwszy i jedyny element swojej Serii (jak, .bool()ale działa nawet w przypadku treści nie boolowskich):
>>> x = pd.Series([100])
>>> x.item()
100
Jeśli chcesz sprawdzić, czy wszystkie lub którekolwiek elementy nie są zerem, nie są puste lub nie są fałszywe:
>>> 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
|zamiastor