panda index filas fila eliminar drop delete data columns column borrar python pandas

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: | para or , & para and , y ~ para not . 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)