As instruções ore andpython requerem truth-values. Como pandasestes são considerados ambíguos, você deve usar "bit a bit" |(ou) ou& (e):
result = result[(result['var']>0.25) | (result['var']<-0.25)]
Elas estão sobrecarregadas para esse tipo de estrutura de dados para gerar a or (ou and).
Apenas para adicionar mais explicações a esta declaração:
A exceção é lançada quando você deseja obter o boolde a 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().
O que você acertar era um lugar onde o operador implicitamente convertido os operandos bool(que usou ormas também acontece para and, ife 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().
Além desses 4 declarações existem várias funções do Python que escondem algumas boolchamadas (como any, all, filter, ...), estes normalmente não são problemáticas compandas.Series mas para ser completo eu queria mencionar estes.
No seu caso, a exceção não é realmente útil, porque não menciona as alternativas corretas . Para ande orvocê pode usar (se quiser comparações entre elementos):
numpy.logical_or:
>>> import numpy as np
>>> np.logical_or(x, y)
ou simplesmente o |operador:
>>> x | y
numpy.logical_and:
>>> np.logical_and(x, y)
ou simplesmente o &operador:
>>> x & y
Se você estiver usando os operadores, certifique-se de definir seus parênteses corretamente devido a à precedência do operador .
Existem várias funções numpy lógicas que devem funcionar empandas.Series .
As alternativas mencionadas na exceção são mais adequadas se você a encontrar ao executar ifouwhile . Em breve vou explicar cada um destes:
Se você deseja verificar se sua série está vazia :
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
O Python normalmente interpreta o leng - ésimo de contêineres (como list, tuple...) como valor de verdade se não tiver uma interpretação booleana explícita. Portanto, se você quiser a verificação do tipo python, poderá fazer: if x.sizeou em if not x.emptyvez deif x .
Se o seu Seriescontiver um e apenas um valor booleano:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
Se você deseja verificar o primeiro e único item da sua série (como .bool()mas funciona mesmo para conteúdos não booleanos):
>>> x = pd.Series([100])
>>> x.item()
100
Se você deseja verificar se todo ou qualquer item não é zero, não está vazio ou não é 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
|vez deor