python - index - Cómo eliminar filas de un DataFrame de pandas basado en una expresión condicional
eliminar fila dataframe pandas (3)
Tengo un DataFrame de pandas y quiero eliminar filas de él donde la longitud de la cadena en una columna en particular es mayor que 2. Sé que puedo usar df.dropna()
para eliminar las filas que contienen cualquier NaN
, pero No veo cómo eliminar filas en función de una expresión condicional.
La respuesta a esta pregunta parece muy cercana a lo que deseo, parece que debería ser capaz de hacer algo como esto:
df[(len(df[''column name'']) < 2)]
pero acabo de obtener el error:
KeyError: u''no item named False''
¿Alguien puede decirme lo que estoy haciendo mal?
Cuando haces len(df[''column name''])
solo estás obteniendo un número, a saber, el número de filas en el DataFrame (es decir, la longitud de la columna misma). Si desea aplicar len
a cada elemento en la columna, use df[''column name''].map(len)
. Entonces intenta
df[df[''column name''].map(len) < 2]
Estaba buscando una solución para esto y tropecé con un enfoque obvio que consiste en filtrar el marco de datos y asignarlo al marco de datos original, de modo
df= df[df["score"] > 50]
Para responder directamente al título de esta pregunta (que entiendo que no es necesariamente el problema del OP, pero podría ayudar a otros usuarios a encontrar esta pregunta), una forma de hacerlo es usar el método de drop :
df = df.drop(some labels)
df = df.drop(df[<some boolean condition>].index)
Ejemplo
Para eliminar todas las filas donde la columna ''puntuación'' es <50:
df = df.drop(df[df.score < 50].index)
Versión local (como se señala en los comentarios)
df.drop(df[df.score < 50].index, inplace=True)
Múltiples condiciones
(ver Indexación Booleana )
Los operadores son:
|
paraor
,&
paraand
, y~
paranot
. Estos se deben agrupar usando paréntesis.
Para eliminar todas las filas donde la columna ''puntuación'' es <50 y> 20
df = df.drop(df[(df.score < 50) & (df.score > 20)].index)