Pandas: Descartar filas en un DataFrame

Publicado el 03 mayo 2021 por Daniel Rodríguez @analyticslane

Parte del contenido de un DataFrame de Pandas se puede eliminar mediante el método drop(). En esta entrada vamos a ver cómo se puede usar este método para descartar filas en un DataFrame en base al índice.

El método drop()

Los DataFrames de Pandas cuentan con el método drop() para eliminar parte del contenido de los mismos. Método que tiene básicamente la siguiente forma:

DataFrame.drop(labels=None, axis=0, inplace=False)

Un método que acepta una cadena o lista con los nombres de las filas o columnas que se desean eliminar. El borrado por filas se hará cuando el valor de axis sea igual a 0, mientras que si se selecciona 1 el borrado será por columnas. Algo que ya se explicó en una entrada anterior.

Es importante tener en cuenta que el método drop() no modifica el contenido del objeto por defecto, sino que crea uno nuevo sin los datos indicados. En el caso de que no deseemos modificar el contenido, por ejemplo, cuando el conjunto de datos es grande y queramos evitar tener ambos en memoria, es posible alterar el comportamiento por defecto del método asignando el valor verdadero a la propiedad inplace.

El método cuenta con más propiedades que se pueden consultar en la documentación, pero que no vamos a usar en esta entrada.

Conjunto de datos de ejemplo

Como en otras ocasiones anteriores se puede crear un pequeño conjunto de datos para comprobar el funcionamiento del método.

import pandas as pd

users = {'first_name': ['Montgomery', 'Dagmar', 'Reeba', 'Shalom', 'Broddy', 'Aurelia'],
         'last_name': ['Humes', 'Elstow', 'Wattisham', 'Alen', 'Keningham', 'Brechin'],
         'age': [27, 41, 29, 29, 21, 33],
         'gender': ['Male', 'Female', 'Female', 'Male', 'Male', 'Female']}

df = pd.DataFrame(users, index=['a', 'b', 'c' , 'd' , 'e' , 'f'])
   first_name  last_name  age  gender
a  Montgomery      Humes   27    Male
b      Dagmar     Elstow   41  Female
c       Reeba  Wattisham   29  Female
d      Shalom       Alen   29    Male
e      Broddy  Keningham   21    Male
f     Aurelia    Brechin   33  Female

Descartar una fila en base a su índice

El uso básico de drop() permite descartar el contenido de una fila usando para ello su nombre. Algo que se puede conseguir solamente con la siguiente línea.

df_drop = df.drop('c')

Obteniendo como resultado un nuevo DataFrame

   first_name  last_name  age  gender
a  Montgomery      Humes   27    Male
b      Dagmar     Elstow   41  Female
d      Shalom       Alen   29    Male
e      Broddy  Keningham   21    Male
f     Aurelia    Brechin   33  Female

Descartar varias filas en base a su índice

En el caso de que sea necesario eliminar más de una fila se puede conseguir en una única línea pasando una lista con los índices que se desean eliminar. Lo que se puede obtener con la siguiente línea de código.

df_drop = df.drop(['c', 'e'])
   first_name last_name  age  gender
a  Montgomery     Humes   27    Male
b      Dagmar    Elstow   41  Female
d      Shalom      Alen   29    Male
f     Aurelia   Brechin   33  Female

Descartar varias filas en base a su posición

Si tenemos la posición de la fila en lugar de su nombre no se puede hacer directamente. Es necesario obtener primero los índices, usando para ello la propiedad index de los DataFrames. Una propiedad que es una lista con el nombre de los índices. Así es posible descartar la segunda y cuarta fila utilizando la siguiente línea de código.

df_drop = df.drop(df.index[[1,3]])
   first_name  last_name  age  gender
a  Montgomery      Humes   27    Male
c       Reeba  Wattisham   29  Female
e      Broddy  Keningham   21    Male
f     Aurelia    Brechin   33  Female

Modificar el DataFrame

Si queremos que no se cree un nuevo DataFrame y se modifique el actual solamente hay que asignar el valor True a la propiedad inplace. Algo que es de gran utilidad para evitar tener varias versiones de este DataFrame en memoria.

df.drop(df.index[[1,3]], inplace=True)

Línea que produce el mismo resultado que la anterior, pero modifica el contenido de df en lugar de crear un DataFrame nuevo.

Conclusiones

En esta entrada se ha repasado el funcionamiento básico del método drop() para descartar filas en un DataFrame. Un método que también se puede usar para eliminar el contenido de las columnas.