Original article: Data Analytics with Pandas – How to Drop a List of Rows from a Pandas Dataframe

Un DataFrame (marco de datos) de pandas es una estructura de datos bidimensional que permite almacenar información en forma de filas y columnas. Es una estructura muy útil para realizar análisis de datos.

Dependiendo del modelo o del objetivo de tu estudio, es posible que necesites eliminar un grupo específico de filas del DataFrame.

En este tutorial veremos como eliminar una lista de filas de un DataFrame de pandas.

Como eliminar una fila o una columna de un DataFrame de pandas

Para eliminar una fila o una columna de un DataFrame, necesitas el método drop() del DataFrame. Puedes leer más acerca del método drop() en la  documentación.

Ejes del DataFrame

  • Las filas se denotan mediante axis=0
  • Las columnas se denotan mediante axis=1

Etiquetas del DataFrame

  • Las filas se etiquetan, por defecto, mediante un índice numérico, comenzando por el 0.
  • Las columnas se etiquetan por nombre.

Parámetros del método drop()

  • index - la lista de filas a eliminar
  • axis=0 - indica que son filas, y no columnas, lo que hay que eliminar
  • inplace=True - realiza la operación sobre el mismo DataFrame, en lugar de crear y devolver uno nuevo.

DataFrame de muestra

Nuestro DataFrame de muestra contiene las columnas, nombre_producto, precio_unitario, num_de_unidades, cantidad_disponible y disponible_desde_fecha. El valor NaN se usa para denotar valores nulos.

import pandas as pd

data = {"nombre_producto":["Teclado","Raton", "Monitor", "CPU","CPU", "Altavoces",pd.NaT],
        "precio_unitario":[500, 200, 5000.235, 10000.550, 10000.550, 250.50,None],
        "num_de_unidades":[5, 5, 10, 20, 20, 8, pd.NaT],
        "cantidad disponible":[5, 6, 10, "no disponible", "no disponible", pd.NaT, pd.NaT],
        "disponible_desde_fecha":['5/11/2021', '23/4/2021', '21/08/2021', '18/09/2021', '18/09/2021', '05/01/2021', pd.NaT]
       }

df = pd.DataFrame(data)

df

El DataFrame tendrá el siguiente aspecto:

nombre_producto precio_unitario num_de_unidades cantidad_disponible disponible_desde_fecha
0 Teclado 500.000 5 5 5/11/2021
1 Raton 200.000 5 6 23/4/2021
2 Monitor 5000.235 10 10 21/08/2021
3 CPU 10000.550 20 no disponible 18/09/2021
4 CPU 10000.550 20 no disponible 18/09/2021
5 Altavoces 250.500 8 NaT 05/01/2021
6 NaT NaN NaT NaT NaT

Después de cada operación de eliminación, imprimiremos el DataFrame médiate df con el formato de tabla de HTML.

A continuación veremos distintas formas de seleccionar las filas a eliminar.

Como eliminar una lista de filas mediante índice

Se puede eliminar una serie de filas pasándole al métododrop() una lista con los índices.

df.drop([5,6], axis=0, inplace=True)

df

En este fragmento,

  • [5,6] son los índices de las filas a eliminar.
  • axis=0 denota que son filas lo que hay que eliminar
  • inplace=True realiza la operación sobre el mismo DataFrame

Tras eliminar las filas con índices 5 y 6, los datos en el DataFrame serán:

nombre_producto precio_unitario num_de_unidades cantidad_disponible disponible_desde_fecha
0 Teclado 500.000 5 5 5/11/2021
1 Raton 200.000 5 6 23/4/2021
2 Monitor 5000.235 10 10 21/08/2021
3 CPU 10000.550 20 no disponible 18/09/2021
4 CPU 10000.550 20 no disponible 18/09/2021

Como eliminar filas mediante un intervalo de índices

También se puede eliminar una serie de filas en un intervalo específico.

Esto puede ser útil para crear una muestra de nuestro conjunto de datos excluyendo intervalos específicos de datos.

Se puede crear un intervalo de filas en un DataFrame mediante el método df.index(), pasándolo luego al método drop() para eliminar esas filas, como se muestra a continuación:

df.drop(df.index[2:4], inplace=True)

df

Qué está haciendo este código:

  • df.index[2:4] genera un intervalo de filas desde la 2ª hasta la 3ª. El límite inferior es inclusivo, mientras que el superior es exclusivo. Es decir, que serán eliminadas las filas 2 y 3, mientras que la 4ª no será eliminada.
  • inplace=True realiza la operación de eliminación sobre el mismo DataFrame.

Después de eliminar filas en el intervalo 2-4, el DataFrame queda de la siguiente manera:

nombre_producto precio_unitario num_de_unidades cantidad_disponible disponible_desde_fecha
0 Teclado 500.00 5 5 5/11/2021
1 Raton 200.00 5 6 23/4/2021
4 CPU 10000.55 20 no disponible 18/09/2021

Como eliminar todas las filas después de un índice

Es posible eliminar todas las filas posteriores a un índice determinado mediante iloc[].

Con el método iloc[] se seleccionan las filas mediante índices, especificando las posiciones inicial y final separadas por :. Por ejemplo, ya hemos usado 2:4 para seleccionar las filas 2 y 3. Si las queremos seleccionar todas, simplemente pasamos : a iloc[].

Esto resulta útil en los casos en los que se quiera dividir el conjunto de datos con propósitos de prueba.

El siguiente fragmento selecciona las filas con índices 0 y 1 y lo asigna a la misma variable. El resultado final es la eliminación de todas las filas a partir del índice 2.

df = df.iloc[:2]

df

Con :2 se seleccionan las filas hasta el índice 2 (exclusivo).

Después de esta operación, nuestro DataFrame tendrá el siguiente aspecto:

nombre_producto precio_unitario num_de_unidades cantidad_disponible disponible_desde_fecha
0 Teclado 500.0 5 5 5/11/2021
1 Raton 200.0 5 6 23/4/2021

Com eliminar filas usando múltiples condiciones

En lugar de especificar unas filas concretas mediante índices, es posible seleccionar las filas que cumplan unas determinadas condiciones.

Por ejemplo, podrías eliminar filas cuyo valor en alguna de las columnas fuera mayor que X y menor que Y.

Esto puede ser útil en el caso de que quieras crear un conjunto de datos que ignore unos valores específicos en ciertas columnas.

Para eliminar filas condicionalmente, selecciona los índices de las filas que cumplan la condición, pasándolos luego al método drop().

df.drop(df[(df['precio_unitario'] >400) & (df['precio_unitario'] < 600)].index, inplace=True)

df

En el código anterior,

  • (df['Unit_Price'] >400) & (df['Unit_Price'] < 600) es la condición para eliminar las filas.
  • df[].index selecciona los índices de las filas que cumplen la condición.
  • inplace=True realiza la operación de eliminado sobre el mismo DataFrame, en lugar de crear y devolver uno nuevo.

Después de eliminar las filas que cumplen la condición de tener precio_unitario mayor que 400 y menor que 600, nuestro DataFrame quedará con los siguientes datos:

nombre_producto precio_unitario num_de_unidades cantidad_disponible disponible_desde_fecha
1 Raton 200.0 5 6 23/4/2021

Conclusión

En resumen, en este artículo nos hemos familiarizado con el método drop() de los DataFrame de pandas. También hemos visto como se etiquetan las filas y columnas de los DataFrame. Y finalmente hemos aprendido a eliminar filas mediante índices, un intervalo de índices y basándose en condiciones.

Si te ha gustado este artículo, no dudes en compartirlo.