Estoy tratando de modificar un DataFrame df
para que solo contenga filas para las cuales los valores en la columna closing_price
está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.query
ypd.eval
parecen 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=True
se 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
mean
ysd
? ¿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