Estoy tratando de modificar un DataFrame dfpara que solo contenga filas para las cuales los valores en la columna closing_priceestán entre 99 y 101 e intento hacer esto con el código a continuación.
Sin embargo, me sale el error
ValueError: el valor de verdad de una serie es ambiguo. Utilice a.empty, a.bool (), a.item (), a.any () o a.all ()
y me pregunto si hay una manera de hacer esto sin usar bucles.
df = df[(99 <= df['closing_price'] <= 101)]

df.queryypd.evalparecen buenos ajustes para este caso de uso. Para obtener información sobre lapd.eval()familia de funciones, sus características y casos de uso, visite Evaluación de expresión dinámica en pandas usando pd.eval () .Respuestas:
Debe usar
()para agrupar su vector booleano para eliminar la ambigüedad.fuente
Considere también series entre :
fuente
inclusive=Truese usa de forma predeterminada enbetween, por lo que puede consultar de esta maneradf = df[df['closing_price'].between(99, 101)]between.df = df[~df['closing_price'].between(99, 101)]hay una alternativa mejor: use el método query () :
ACTUALIZACIÓN: respondiendo al comentario:
fuente
meanysd? ¿Son esos nombres de columna?también puedes usar el
.between()métodofuente
o
fuente
Si está tratando con múltiples valores y múltiples entradas, también puede configurar una función de aplicación como esta. En este caso, filtrar un marco de datos para ubicaciones de GPS que se encuentran dentro de ciertos rangos.
fuente
En lugar de esto
Deberías usar esto
Tenemos que usar los operadores lógicos bit a bit de NumPy |, &, ~, ^ para las consultas compuestas. Además, los paréntesis son importantes para la precedencia de los operadores.
Para obtener más información, puede visitar el enlace: Comparaciones, máscaras y lógica booleana
fuente