Eliminación de filas en un DataFrame pandas a partir de una condición

En este escenario partimos de un DataFrame conteniendo valores nulos en alguna de sus características, por ejemplo, el dataset del Titanic proveído por seaborn:

import pandas as pd
import seaborn as sns

titanic = sns.load_dataset("titanic")
titanic.head()

Dataset Titanic

Podemos comprobar el tamaño del dataset y el número de nulos en la columna "age", por ejemplo:

titanic.shape

(891, 15)

titanic.age.isnull().sum()

177

El objetivo es eliminar del DataFrame titanic las filas que cumplan una cierta condición, por ejemplo, que tomen un valor nulo en el campo "age".

La función drop de pandas elimina filas de un DataFrame, pero exige pasar como argumento las etiquetas del índice que corresponda (del índice de filas si queremos eliminar filas, o del índice de columnas si queremos eliminar columnas), de forma que la pregunta es: ¿Cómo conseguimos los índices de las filas que cumplen una cierta condición? Y la respuesta es: filtrando el DataFrame y utilizando el atributo index. Hagámoslo por partes. En primer lugar extraigamos las filas que cumplen la condición deseada:

df = titanic[titanic.age.isnull()]

df.shape

(177, 15)

Comprobamos que, efectivamente, hemos extraído el número correcto de filas. Ahora, con el atributo index podemos extraer los índices de filas de dicho subconjunto del DataFrame inicial:

df.index

Índices extraídos

Ahora ya podemos aplicar la función drop a nuestro DataFrame inicial:

titanic.drop(titanic[titanic.age.isnull()].index, inplace = True)

titanic.shape

(714, 15)

Comprobamos que han quedado los 714 (= 891 - 177) registros esperados. Si quisiéramos confirmar el número de nulos en la columna "age":

titanic.age.isnull().sum()

0

Categoría
Submitted by admin on Mon, 03/25/2019 - 12:39