Instrukcje or
i and
python wymagają truth
wartości -values. Ponieważ pandas
są 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ć bool
tematyce 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ś or
ale zdarza się również and
, if
i 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 bool
połą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 and
i or
moż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 if
lub 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 len
gth 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.size
lub if not x.empty
zamiast if x
.
Jeśli Series
zawiera 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