Las declaraciones ory andpython requieren truthvalores. Para pandasestos se consideran ambiguos, por lo que debe utilizar operaciones "bit a bit" |(o) o &(y):
result = result[(result['var']>0.25) | (result['var']<-0.25)]
Estos están sobrecargados para este tipo de estructuras de datos para producir el elemento inteligente or(o and).
Solo para agregar más explicaciones a esta declaración:
La excepción se produce cuando desea obtener el boolde un 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().
Lo que golpeó fue un lugar donde el operador convirtió implícitamente los operandos a bool(usted usó orpero también sucede para and, ify 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().
Además de estos 4 estados hay varias funciones de Python que se esconden algunas boolllamadas (como any, all, filter, ...), estos normalmente no son problemáticos con pandas.Series, pero para lo completo que quería mencionar estos.
En su caso, la excepción no es realmente útil, porque no menciona las alternativas correctas . Para andy orpuede usar (si desea comparaciones basadas en elementos):
numpy.logical_or:
>>> import numpy as np
>>> np.logical_or(x, y)
o simplemente el |operador:
>>> x | y
numpy.logical_and:
>>> np.logical_and(x, y)
o simplemente el &operador:
>>> x & y
Si está utilizando los operadores, asegúrese de configurar sus paréntesis correctamente debido a la precedencia del operador .
Hay varias funciones lógicas numpy que deberían funcionar pandas.Series.
Las alternativas mencionadas en la Excepción son más adecuadas si la encontró al hacer ifo while. En breve explicaré cada uno de estos:
Si desea verificar si su Serie está vacía :
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
Python normalmente interpreta la length de los contenedores (como list, tuple...) como valor de verdad si no tiene una interpretación booleana explícita. Entonces, si desea la comprobación similar a Python, puede hacer: if x.sizeo en if not x.emptylugar de if x.
Si Seriescontiene uno y solo un valor booleano:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
Si desea verificar el primer y único elemento de su Serie (como .bool()pero funciona incluso para contenidos no booleanos):
>>> x = pd.Series([100])
>>> x.item()
100
Si desea verificar si todo o algún artículo es cero, no está vacío o no es falso:
>>> 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
|lugar deor