Seleción usando «query»

Seleción usando «query»

Pandas provee una alternativa para la selección condicional de registros a través de la función query(). Admite una sintaxis de consulta mediante operadores de comparación.

Veamos las mismas consultas de ejemplo que para el apartado anterior:

Seleción usando «query»

Seleción usando «query»

Truco: Si los nombres de columna contienen espacios, se puede hacer referencias a ellas con comillas invertidas. Por ejemplo: ‘Total Stock’.Python

Comparativa en consultas

Hemos visto dos métodos para realizar consultas (o filtrado) en un DataFrame: usando selección booleana con corchetes y usando la función query. ¿Ambos métodos son igual de eficientes en términos de rendimiento?

Haremos una comparativa muy simple para tener, al menos, una idea de sus órdenes de magnitud. En primer lugar creamos un DataFrame con 3 columnas y 1 millón de valores aleatorios enteros en cada una de ellas:

Seleción usando «query»

Seleción usando «query»

Ahora realizaremos la misma consulta sobre el DataFrame aplicando los métodos ya vistos:

Seleción usando «query»

Sin que esto sea en modo alguna concluyente, da la sensación de que query() anade un cierto «overhead» al filtrado y aumentan los tiempos de cómputo.

Modificación de un DataFrame

Modificando valores existentes

Partiendo del acceso a los datos que ya hemos visto, podemos asignar valores sin mayor dificultad.Python

Pero antes de modificar el DataFrame original, vamos a hacer una copia del mismo:Python

Seleción usando «query»

Supongamos que hemos cometido un error en el número de empleados/as de Apple y queremos corregirlo:

Seleción usando «query»

Seleción usando «query»

Supongamos que no se había contemplado una subida del 20% en los ingresos y queremos reflejarla:

Seleción usando «query»

Supongamos que todas las empresas tecnológicas mueven su sede a Vigo (España) y queremos reflejarlo:

Seleción usando «query»

Nota: En este último ejemplo se produce un «broadcast» o difusión del valor escalar a todos los registros del «dataset».

Reemplazo de valores

Hay una función muy importante en lo relativo a la modificación de valores. Se trata de replace() y admite una amplia variedad de parámetros. Se puede usar tanto para tipos numéricos como textuales.

Uno de los usos más habituales es la recodificación. Supongamos que queremos recodificar los países en ISO3166 Alpha-3 para el DataFrame de empresas tecnológicas:

Seleción usando «query»

Ejercicio

Recodifique la columna Province del «dataset» democan de tal manera que aparezcan las provincias con el texto completo: Santa Cruz de Tenerife y Las Palmas de Gran Canaria.

Insertando y borrando filas

Podemos insertar datos en un DataFrame como filas o como columnas. Supongamos que queremos incluir una nueva empresa Cisco:

Seleción usando «query»

Truco: El método append() devuelve un nuevo DataFrame con los datos añadidos. Es por eso que si queremos consolidar los cambios, debemos realizar una asignación.Python

Imaginemos ahora que Facebook, Tencent e Hitachi caen en bancarrota y debemos eliminarlas de nuestro conjunto de datos:

Seleción usando «query»

Insertando y borrando columnas

Insertar una columna en un DataFrame es equivalente a añadir una clave en un diccionario.

Supongamos que queremos añadir una columna «Expenses» (gastos). No manejamos esta información, así que, a modo de ejemplo, utilizaremos unos valores aleatorios:

Seleción usando «query»

Truco: También existe la función insert() que nos permite insertar una columna en una posición determinada.

En el caso de que no nos haga falta una columna podemos borrarla fácilmente. Una opción sería utilizar la función «built-in» del(), pero seguiremos con el uso de funciones propias de pandas. Imaginemos que queremos eliminar la columna «Expenses»:

Seleción usando «query»

Truco: Recordar que el parámetro axis indica en qué «dirección» estamos trabajando. Véase el acceso a un DataFrame.

El parámetro inplace

Muchas de las funciones de pandas se dicen «no destructivas» en el sentido de que no modifican el conjunto de datos original, sino que devuelven uno nuevo con las modificaciones realizadas. Pero este comportamiento se puede modificar utilizando el parámetro inplace.

Veamos un ejemplo con el borrado de columnas:

Seleción usando «query»

Ejercicio

Añada una nueva columna Density a democan de tal manera que represente la densidad de población de cada isla del archipiélago canario.

También es posible renombrar columnas utilizando la función rename() de Pandas.

Supongamos un caso de uso en el que queremos renombrar las columnas a sus tres primeras letras en minúsculas. Tenemos dos maneras de hacerlo. La primera sería directamente creando un «mapping» entre los nombres de columna actuales y los nombres nuevos:

Seleción usando «query»

Seleción usando «query»

Otro camino para conseguir el mismo resultado es aplicar una función que realice esta tarea de manera automatizada:

Seleción usando «query»

Ver también:

Si en vez del parámetro nominal columns utilizamos el parámetro index estaremos renombrando los valores del índice. Se aplica el mismo comportamiento ya visto.

Nada impide asignar directamente una lista (tupia) de nombres a las columnas de un DataFrame:

Seleción usando «query»

Publicaciones Similares