Estou tentando modificar um DataFrame df
para conter apenas linhas para as quais os valores na coluna closing_price
estão entre 99 e 101 e tentando fazer isso com o código abaixo.
No entanto, recebo o erro
ValueError: O valor verdadeiro de uma série é ambíguo. Use a.empty, a.bool (), a.item (), a.any () ou a.all ()
e estou me perguntando se existe uma maneira de fazer isso sem usar loops.
df = df[(99 <= df['closing_price'] <= 101)]
df.query
epd.eval
parecem adequados para esse caso de uso. Para obter informações sobre apd.eval()
família de funções, seus recursos e casos de uso, visite Avaliação de Expressão Dinâmica em pandas usando pd.eval () .Respostas:
Você deve usar
()
para agrupar seu vetor booleano para remover ambigüidade.fonte
Considere também as séries entre :
fonte
inclusive=True
é usada por padrão embetween
, portanto, você pode consultar desta formadf = df[df['closing_price'].between(99, 101)]
between
.df = df[~df['closing_price'].between(99, 101)]
existe uma alternativa melhor - use o método query () :
ATUALIZAÇÃO: respondendo ao comentário:
fonte
mean
esd
? Esses são nomes de coluna?você também pode usar o
.between()
métodofonte
ou
fonte
Se estiver lidando com vários valores e várias entradas, você também pode configurar uma função de aplicação como esta. Neste caso, filtrar um dataframe para localizações de GPS que caem dentro de certos intervalos.
fonte
Em vez disso
Você deveria usar isso
Temos que usar os operadores lógicos bit a bit do NumPy |, &, ~, ^ para consultas compostas. Além disso, os parênteses são importantes para a precedência do operador.
Para mais informações, você pode visitar o link: Comparações, Máscaras e Lógica Booleana
fonte