Julia

Eliminar filas en DataFrame Julia en base a sus valores

Una de las tareas más repetidas cuando se procesa un conjunto de datos es el filtrado de registros en base a sus valores. Eliminando aquellos que no son de interés para el análisis que se desea realizar. Por eso, en Julia existe la función filter() con la que es posible filtrar fácilmente los registros de un conjunto de datos. Veamos cómo se puede emplear esta función para eliminar filas en DataFrame Julia cuyos valores no cumplen una o varias condiciones.

Conjunto de datos de ejemplo

A modo de ejemplo se puede crear un conjunto de datos sencillo para comprobar el funcionamiento de la función filter(). Por ejemplo, un conjunto de datos de clientes como el siguiente que ya se utilizó en su momento en la serie de introducción a Julia.

julia> using DataFrames

julia> clients = DataFrame(
           id=[1,2,3,4,5],
           first_name=["Oralie" ,"Imojean" ,"Michele", "Ailbert", "Stevy"],
           last_name=["Fidgeon" ,"Benet" ,"Woodlands", "Risdale", "MacGorman"],
           age=[30 ,21 ,29 ,22, 24])
5×4 DataFrame
 Row │ id     first_name  last_name  age   
     │ Int64  String      String     Int64 
─────┼─────────────────────────────────────
   1 │     1  Oralie      Fidgeon       30
   2 │     2  Imojean     Benet         21
   3 │     3  Michele     Woodlands     29
   4 │     4  Ailbert     Risdale       22
   5 │     5  Stevy       MacGorman     24

Filtrado de los clientes en base a la edad

En el conjunto de datos anterior una operación que podríamos realizar es eliminar aquellos clientes que no tienen una edad. Por ejemplo, eliminar los clientes que sean menores de 25 años. Para ello se puede usar la función filter() pasando como primer parámetro una función que se aplicará sobre cada una de las filas y retorne un valor verdadero o falso. Como segundo parámetro de la función se ha de pasar el DataFrame sobre el que se desea aplicar el filtro. De este modo, la función filter() devolverá un nuevo DataFrame con las filas para las que la función devuelve verdadero. Así, para aplicar el filtro indicado antes solamente hay que escribir

julia> filter(row -> row.age > 25, clients)
2×4 DataFrame
 Row │ id     first_name  last_name  age   
     │ Int64  String      String     Int64 
─────┼─────────────────────────────────────
   1 │     1  Oralie      Fidgeon       30
   2 │     3  Michele     Woodlands     29

En donde el filtro se ha definido mediante una función anónima.

Seleccionar filas en base al nombre del cliente

Otra posible opción de filtrado sería seleccionar aquellos clientes cuyo nombre contenga una a. Lo que nos dejará solamente dos clientes. Para lo que solamente es necesario cambiar la función anónima por otra que aplique contains() sobre el nombre y compruebe si existe o no la letra en el mismo. Lo que se puede hacer con la siguiente línea

julia> filter(row -> contains(row.first_name, 'a'), clients)
2×4 DataFrame
 Row │ id     first_name  last_name  age   
     │ Int64  String      String     Int64 
─────┼─────────────────────────────────────
   1 │     1  Oralie      Fidgeon       30
   2 │     2  Imojean     Benet         21

Combinar condiciones

Finalmente se pueden combinar las dos condiciones anteriores para seleccionar solamente aquellos elementos que cumplen ambas condiciones. Algo que es relativamente sencillo y se puede hacer simplemente mediante

julia> filter(row -> row.age > 25 && contains(row.first_name, 'a'), clients)
1×4 DataFrame
 Row │ id     first_name  last_name  age   
     │ Int64  String      String     Int64 
─────┼─────────────────────────────────────
   1 │     1  Oralie      Fidgeon       30

Pudiéndose ver lo fácil que es crear filtros complejos en DataFrames de Julia. Solamente hay que refinar la función anónima con las condiciones que sean necesarias en cada caso.

Conclusiones

En esta ocasión se ha visto cómo, gracias al uso de la función filter(), es posible eliminar filas en DataFrame Julia en base a sus valores. Una función que ofrece grandes posibilidades al combinarlo con la potencia de las funciones anónimas disponibles en Julia.

Imagen de SplitShire en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Por Qué las Contraseñas Largas son más Seguras que las Complejas

"Tu contraseña debe tener al menos 8 caracteres, una mayúscula, un número y un símbolo…

1 día ago

Gini, KS y AUC: Cómo Medir la Calidad de un Modelo de Credit Scoring

Cuando un analista de riesgo presenta un nuevo scorecard ante el comité de dirección, la…

3 días ago

Curiosidad: De dónde vienen foo, bar y foobar

Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…

1 semana ago

BG/NBD + Gamma/Gamma: el modelo probabilístico para CLV en compras continuas

Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…

1 semana ago

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

2 semanas ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

2 semanas ago

This website uses cookies.