SQL en Pandas con Pandasql

SQL en Pandas Cómo utilizar pandasql para análisis de datos

 

Si solo puedes agregar una habilidad, y sin argumento el más importante, en tu caja de herramientas de ciencia de datos, es SQL. En el ecosistema de análisis de datos en Python, sin embargo, pandas es una biblioteca poderosa y popular.

Pero, si eres nuevo en pandas, aprender a usar las funciones de pandas, como agrupación, agregación, uniones y más, puede resultar abrumador. Sería mucho más fácil hacer consultas a tus dataframes con SQL en su lugar. La biblioteca pandasql te permite hacer precisamente eso.

Así que aprendamos a usar la biblioteca pandasql para ejecutar consultas SQL en un dataframe de pandas con un conjunto de datos de muestra.

 

Primeros pasos con Pandasql

 

Antes de continuar, prepararemos nuestro entorno de trabajo.

 

Instalando pandasql

 

Si estás usando Google Colab, puedes instalar pandasql usando `pip` y seguir el código:

pip install pandasql

 

Si estás utilizando Python en tu máquina local, asegúrate de tener instalados pandas y Seaborn en un entorno virtual dedicado para este proyecto. Puedes usar el paquete integrado venv para crear y administrar entornos virtuales.

Ejecutaré Python 3.11 en Ubuntu LTS 22.04. Por lo tanto, las siguientes instrucciones son para Ubuntu (también deberían funcionar en Mac). Si estás en una máquina con Windows, sigue estas instrucciones para crear y activar entornos virtuales.

Para crear un entorno virtual (v1 aquí), ejecuta el siguiente comando en tu directorio de proyectos:

python3 -m venv v1

 

Luego, activa el entorno virtual:

source v1/bin/activate

 

Ahora instala pandas, seaborn y pandasql:

pip3 install pandas seaborn pandasql

 

Nota: Si aún no tienes `pip` instalado, puedes actualizar los paquetes del sistema e instalarlo ejecutando: apt install python3-pip.

 

La función `sqldf`

 

Para ejecutar consultas SQL en un dataframe de pandas, puedes importar y usar sqldf con la siguiente sintaxis:

from pandasql import sqldfsqldf(query, globals())

 

Aquí, 

  • query representa la consulta SQL que deseas ejecutar en el dataframe de pandas. Debe ser una cadena que contenga una consulta SQL válida.
  • globals() especifica el espacio de nombres global donde se definen los dataframe(s) utilizados en la consulta.

 

Consulta de un dataframe de pandas con Pandasql

 

Comencemos importando los paquetes necesarios y la función sqldf de pandasql:

import pandas as pdimport seaborn as snsfrom pandasql import sqldf

 

Como ejecutaremos varias consultas en el dataframe, podemos definir una función para llamarla pasando la consulta como argumento:

# Define una función reutilizable para ejecutar consultas SQLrun_query = lambda query: sqldf(query, globals())

 

Para todos los ejemplos que siguen, vamos a ejecutar la función run_query (que utiliza sqldf() internamente) para ejecutar la consulta SQL en el dataframe tips_df. Luego mostraremos el resultado devuelto.

 

Cargando el conjunto de datos

 

Para este tutorial, vamos a usar el conjunto de datos “tips” que se encuentra incorporado en la biblioteca Seaborn. El conjunto de datos “tips” contiene información sobre propinas en restaurantes, incluyendo el total de la cuenta, el monto de la propina, el género del pagador, el día de la semana y más.

Cargar el conjunto de datos “tips” en el dataframe tips_df:

# Cargar el conjunto de datos "tips" en un dataframe de pandas
tips_df = sns.load_dataset("tips")

 

Ejemplo 1 – Selección de datos

 

Aquí tenemos nuestra primera consulta: una simple sentencia SELECT:

# Consulta de selección simplersult_1 = """SELECT *FROM tips_dfLIMIT 10;"""resultado_1 = run_query(consulta_1)print(resultado_1)

 

Como se puede ver, esta consulta selecciona todas las columnas del dataframe tips_df y limita el resultado a las primeras 10 filas utilizando la palabra clave `LIMIT`. Es equivalente a ejecutar tips_df.head(10) en pandas:

 

 

Ejemplo 2 – Filtrar según una condición

 

A continuación, vamos a escribir una consulta para filtrar los resultados según condiciones:

# Filtrar según una condición
consulta_2 = """SELECT *FROM tips_dfWHERE total_bill > 30 AND tip > 5;"""resultado_2 = run_query(consulta_2)print(resultado_2)

 

Esta consulta filtra el dataframe tips_df según la condición especificada en la cláusula WHERE. Se seleccionan todas las columnas del dataframe tips_df donde el valor de ‘total_bill’ es mayor a 30 y el valor de ‘tip’ es mayor a 5.

Al ejecutar consulta_2, se obtiene el siguiente resultado:

 

 

Ejemplo 3 – Agrupación y agregación

 

Vamos a ejecutar la siguiente consulta para obtener el promedio del monto de la cuenta agrupado por día:

# Agrupación y agregación
consulta_3 = """SELECT day, AVG(total_bill) as promedio_cuenta FROM tips_df GROUP BY day;"""resultado_3 = run_query(consulta_3)print(resultado_3)

 

Aquí está el resultado:

  

Podemos observar que el monto promedio de la cuenta los fines de semana es ligeramente mayor.

Veamos otro ejemplo de agrupación y agregaciones. Considera la siguiente consulta:

consulta_4 = """SELECT day, COUNT(*) as num_transacciones, AVG(total_bill) as promedio_cuenta, MAX(tip) as max_propina FROM tips_df GROUP BY day;"""resultado_4 = run_query(consulta_4)print(resultado_4)

 

La consulta consulta_4 agrupa los datos del dataframe tips_df por la columna ‘day’ y calcula las siguientes funciones agregadas para cada grupo:

  • num_transacciones: el número de transacciones,
  • promedio_cuenta: el promedio de la columna ‘total_bill’, y
  • max_propina: el valor máximo de la columna ‘tip’.

Como se muestra, obtenemos las cantidades anteriores agrupadas por día:

Ejemplo 4 – Subconsultas

Agreguemos una consulta de ejemplo que utilice una subconsulta:

# subconsultasquery_5 = """SELECT *FROM tips_dfWHERE total_bill > (SELECT AVG(total_bill) FROM tips_df);"""result_5 = run_query(query_5)print(result_5)

Aquí,

  • La subconsulta interna calcula el valor promedio de la columna ‘total_bill’ del dataframe tips_df.
  • La consulta externa luego selecciona todas las columnas del dataframe tips_df donde ‘total_bill’ es mayor que el valor promedio calculado.

Ejecutar consulta_5 da lo siguiente:

Ejemplo 5 – Unir dos DataFrames

Solo tenemos un dataframe. Para realizar una unión simple, creemos otro dataframe de la siguiente manera:

# Crear otro DataFrame para unir con tips_dfother_data = pd.DataFrame({    'day': ['Thur','Fri', 'Sat', 'Sun'],    'special_event': ['Throwback Thursday', 'Feel Good Friday', 'Social Saturday','Fun Sunday', ]})

El dataframe other_data asocia cada día con un evento especial.

Ahora realicemos un LEFT JOIN entre los dataframes tips_df y other_data en la columna ‘day’ común:

query_6 = """SELECT t.*, o.special_eventFROM tips_df tLEFT JOIN other_data o ON t.day = o.day;"""result_6 = run_query(query_6)print(result_6)

Aquí está el resultado de la operación de unión:

Resumen y Próximos Pasos

En este tutorial, repasamos cómo ejecutar consultas SQL en dataframes de pandas utilizando pandasql. Aunque pandasql facilita la consulta de dataframes con SQL, tiene algunas limitaciones.

La limitación clave es que pandasql puede ser varias órdenes más lento que pandas nativo. Entonces, ¿qué deberías hacer? Bueno, si necesitas realizar análisis de datos con pandas, puedes usar pandasql para consultar dataframes cuando estás aprendiendo pandas y avanzando rápidamente. Luego puedes cambiar a pandas u otra biblioteca como Polars una vez que te sientas cómodo con pandas.

Para dar los primeros pasos en esta dirección, intenta escribir y ejecutar los equivalentes de pandas de las consultas SQL que hemos ejecutado hasta ahora. Todos los ejemplos de código utilizados en este tutorial se encuentran en GitHub. ¡Sigue programando! Bala Priya C es una desarrolladora y escritora técnica de India. Le gusta trabajar en la intersección de las matemáticas, la programación, la ciencia de datos y la creación de contenido. Sus áreas de interés y experiencia incluyen DevOps, ciencia de datos y procesamiento de lenguaje natural. Le gusta leer, escribir, programar y tomar café. Actualmente, está trabajando en aprender y compartir su conocimiento con la comunidad de desarrolladores mediante la redacción de tutoriales, guías prácticas, artículos de opinión y más.

We will continue to update Zepes; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

Inteligencia Artificial

Evaluando el dominio lingüístico de la Inteligencia Artificial Un análisis exhaustivo de las habilidades morfológicas de ChatGPT en diferentes idiomas

Investigadores examinan rigurosamente las habilidades morfológicas de ChatGPT en cuatro idiomas (inglés, alemán, tami...

Inteligencia Artificial

Ingenieros del MIT desarrollan réplica robótica del ventrículo derecho del corazón

Los ingenieros de la prestigiosa Universidad Tecnológica de Massachusetts (MIT) han desarrollado una revolucionaria r...

Inteligencia Artificial

Robot aprende a limpiar el espacio tal como te gusta

Los roboticistas desarrollaron un robot que puede limpiar espacios basándose en las preferencias personales de los us...

Inteligencia Artificial

Investigadores de Inception, MBZUAI y Cerebras lanzan en código abierto 'Jais' el modelo de lenguaje árabe más avanzado del mundo

Los grandes modelos de lenguaje como GPT-3 y su impacto en varios aspectos de la sociedad son objeto de un gran inter...

Inteligencia Artificial

Intérprete de código de ChatGPT Todo lo que necesitas saber

OpenAI ha estado causando sensación con emocionantes anuncios, y el último seguramente complacerá a los usuarios de C...