HOWTO · Pandas

Pandas Eliminar Filas

Este tutorial explica cómo eliminar filas de un DataFrame de pandas con el método pandas.DataFrame.drop().

En esta página

Este tutorial muestra cómo eliminar filas de un DataFrame de pandas con pandas.DataFrame.drop(). Los valores que se pasan a drop() son etiquetas del índice. Con el índice entero predeterminado, las etiquetas pueden parecer posiciones de fila, pero una etiqueta no es necesariamente una posición. Los ejemplos siguientes muestran cómo seleccionar etiquetas directamente, convertir posiciones en etiquetas y eliminar las filas que cumplen una condición en una columna.

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]}
)
remaining = people.drop([0, 2])
print(remaining)

Eliminar filas por etiquetas del índice

Pasa una etiqueta o una lista de etiquetas a drop(). En el ejemplo anterior, el índice predeterminado va de 0 a 4, así que las etiquetas 0 y 2 identifican la primera y la tercera fila. El DataFrame devuelto conserva las etiquetas originales de las filas restantes; pandas no las renumera automáticamente. Usa reset_index(drop=True) si te resulta útil tener un índice nuevo y consecutivo.

Si el índice es personalizado, pasa sus etiquetas reales. En este ejemplo independiente, las etiquetas son nombres, así que "A" y "C" seleccionan la primera y la tercera entrada únicamente porque esas etiquetas se asignaron a esas filas:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]},
    index=["A", "B", "C", "D", "E"],
)
remaining = people.drop(["A", "C"])
print(remaining)

Una etiqueta que no está presente produce un KeyError de forma predeterminada. Si las etiquetas son opcionales, pasa errors="ignore" para omitir las que no estén presentes; úsalo deliberadamente, porque también puede ocultar una etiqueta mal escrita.

Eliminar filas por posición

drop() acepta etiquetas, no posiciones de fila. Para eliminar filas por su posición, empezando desde cero, primero selecciona esas posiciones del índice y luego pasa las etiquetas obtenidas a drop(). Esta distinción importa cuando el índice es personalizado o se ha reordenado. El ejemplo es independiente:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]},
    index=["A", "B", "C", "D", "E"],
)
positions = [0, 2]
labels = people.index.take(positions)
remaining = people.drop(labels)
print(remaining)

Aquí, las posiciones 0 y 2 se convierten en las etiquetas "A" y "C" antes de eliminar las filas. Si ya conoces las etiquetas, pásalas directamente, como en la sección anterior. También puedes usar iloc para seleccionar filas por posición cuando quieras conservar las filas seleccionadas en vez de eliminarlas.

Eliminar filas según los valores de una columna

Para eliminar las filas que cumplen una condición, busca sus etiquetas del índice y pásalas a drop(). En este ejemplo, la condición selecciona las edades de hasta 33 años, inclusive; por tanto, el DataFrame resultante conserva a las personas mayores de 33 años:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [31, 33, 35, 36, 34]},
    index=["A", "B", "C", "D", "E"],
)
remove_labels = people.index[people["Age"] <= 33]
remaining = people.drop(remove_labels)
print(remaining)

Este método resulta útil cuando la condición identifica las filas que quieres eliminar. Si es más claro indicar qué filas quieres conservar, usa un filtro booleano, por ejemplo people[people["Age"] > 33]. Para esta condición, ambos métodos devuelven las filas restantes correspondientes; el filtrado puede ser más fácil de leer cuando la idea principal es definir qué filas conservar.

Entender el comportamiento de DataFrame.drop() y sus errores habituales

pandas.DataFrame.drop() devuelve un DataFrame nuevo de forma predeterminada y deja intacto el objeto original. Asigna el resultado, como se hace en cada ejemplo, o úsalo en una expresión posterior. La opción inplace=True modifica el objeto original y devuelve None; por lo general, asignar el resultado, como en people = people.drop(...), es más claro porque hace explícito el valor obtenido.

De forma predeterminada, drop() elimina etiquetas del índice. Para eliminar etiquetas de columnas, especifica axis="columns" (o columns=[...]); este artículo trata las etiquetas de filas. Recuerda que un índice entero predeterminado puede hacer que las etiquetas parezcan posiciones, mientras que un índice personalizado deja clara la diferencia. Si un resultado te sorprende, comprueba people.index, verifica que la condición seleccione las filas que quieres eliminar y confirma que conservaste el valor devuelto por drop().