Pular para o conteúdo principal

Como usar SQL no pandas Usando consultas pandasql

Liberte o poder do SQL no pandas e saiba quando e como usar consultas SQL no pandas usando a biblioteca pandasql para uma integração perfeita.
24 de abr. de 2024  · 8 min de leitura

SQL, ou Structured Query Language (Linguagem de Consulta Estruturada), é uma linguagem de programação usada para acessar, extrair, manipular e explorar dados armazenados em bancos de dados relacionais. pandas é uma biblioteca de código aberto do Python projetada especificamente para manipulação e análise de dados.

Neste tutorial, discutiremos quando e como podemos (e quando não podemos) usar a funcionalidade SQL na estrutura do pandas. Além disso, daremos uma olhada em vários exemplos de implementação dessa abordagem e compararemos os resultados com o código equivalente em pandas puro.

Por que usar SQL no pandas?

Considerando as definições da introdução, por que alguém deveria querer usar o SQL combinado com o pandas quando este último é um pacote completo para análise de dados?

A resposta é que, em algumas ocasiões, especialmente em programas complexos, as consultas SQL parecem muito mais diretas e fáceis de ler do que o código correspondente no pandas. Isso é particularmente verdadeiro para as pessoas que inicialmente usaram o SQL para trabalhar com dados e, mais tarde, aprenderam a usar o pandas.

Se precisar de mais treinamento sobre pandas, confira nosso curso Manipulação de dados com pandas e o tutorial Pandas: DataFrames em Python.

Para ver a legibilidade do SQL em ação, vamos supor que temos uma tabela (um dataframe) chamada penguins que contém várias informações sobre pinguins (e trabalharemos com essa tabela mais adiante neste tutorial). Para extrair todas as espécies exclusivas de pinguins que são machos e que têm nadadeiras maiores que 210 mm, precisaríamos do seguinte código no pandas:

penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique()

Em vez disso, para obter as mesmas informações usando SQL, executaríamos o seguinte código:

SELECT DISTINCT species FROM penguins WHERE sex = 'Male' AND flipper_length_mm > 210

O segundo trecho de código, escrito em SQL, parece quase uma frase natural em inglês e, portanto, é muito mais intuitivo. Podemos aumentar ainda mais sua legibilidade, distribuindo-a em várias linhas:

SELECT DISTINCT species
  FROM penguins 
 WHERE sex = 'Male' 
   AND flipper_length_mm > 210

Agora que identificamos as vantagens de usar SQL para pandas, vamos ver como podemos combinar tecnicamente os dois.

Como usar o pandasql

A biblioteca pandasql Python permite consultar os quadros de dados do pandas executando comandos SQL sem precisar se conectar a nenhum servidor SQL. Por trás disso, ele usa a sintaxe do SQLite, detecta automaticamente qualquer dataframe do pandas e o trata como uma tabela SQL comum.

Configuração de seu ambiente

Primeiro, precisamos instalar o pandasql:

pip install pandasql

Em seguida, importamos os pacotes necessários:

from pandasql import sqldf
import pandas as pd

Acima, importamos diretamente a função sqldf do pandasql, que é praticamente a única função significativa da biblioteca. Como o próprio nome sugere, ele é aplicado para consultar quadros de dados usando a sintaxe SQL. Além dessa função, o pandasql vem com dois conjuntos de dados internos simples que podem ser carregados usando as funções autoexplicativas load_births() e load_meat().

pandasql Syntax

A sintaxe da função sqldf é muito simples:

sqldf(query, env=None)

Aqui, query é um parâmetro obrigatório que recebe uma consulta SQL como uma cadeia de caracteres, e env- um parâmetro opcional (e raramente útil) que pode ser locals() ou globals() e permite que sqldf acesse o conjunto correspondente de variáveis em seu ambiente Python.

A função sqldf retorna o resultado de uma consulta como um dataframe do pandas.

Quando podemos usar o pandasql

A biblioteca pandasql permite trabalhar com dados usando a DQL (Data Query Language, linguagem de consulta de dados), que é um dos subconjuntos do SQL. Em outras palavras, com o pandasql, podemos executar consultas nos dados armazenados em um banco de dados para recuperar as informações necessárias. Em particular, podemos acessar, extrair, filtrar, classificar, agrupar, juntar, agregar os dados e realizar operações matemáticas ou lógicas sobre eles.

Quando não podemos usar o pandasql

O pandasql não permite o uso de nenhum outro subconjunto de SQL além do DQL. Isso significa que não podemos aplicar o pandasql para modificar (atualizar, truncar, inserir etc.) tabelas ou alterar (atualizar, excluir ou inserir) os dados em uma tabela.

Além disso, como essa biblioteca é baseada na sintaxe SQL, devemos tomar cuidado com as peculiaridades conhecidas do SQLite.

Exemplos de uso do pandasql

Agora, daremos uma olhada mais detalhada em como executar consultas SQL nos quadros de dados do pandas usando a função sqldf de pandasql. Para praticar com alguns dados, vamos carregar um dos conjuntos de dados integrados da biblioteca seaborn:penguins:

import seaborn as sns
penguins = sns.load_dataset('penguins')
print(penguins.head())

Saída:

   species island     bill_length_mm  bill_depth_mm  flipper_length_mm  \
0  Adelie  Torgersen            39.1           18.7              181.0   
1  Adelie  Torgersen            39.5           17.4              186.0   
2  Adelie  Torgersen            40.3           18.0              195.0   
3  Adelie  Torgersen             NaN            NaN                NaN   
4  Adelie  Torgersen            36.7           19.3              193.0   

   body_mass_g     sex  
0       3750.0    Male  
1       3800.0  Female  
2       3250.0  Female  
3          NaN     NaN  
4       3450.0  Female

Se você precisar atualizar suas habilidades em SQL, nossa trilha de habilidades SQL Fundamentals é um bom ponto de referência.

Extração de dados com o pandasql

print(sqldf('''SELECT species, island 
FROM penguins 
LIMIT 5'''))

Saída:

  species  island
0  Adelie  Torgersen
1  Adelie  Torgersen
2  Adelie  Torgersen
3  Adelie  Torgersen
4  Adelie  Torgersen

Acima, extraímos informações sobre as espécies e a geografia dos primeiros cinco pingüins do quadro de dados penguins. Observe que a execução da função sqldf retorna um dataframe do pandas:

print(type(sqldf('''SELECT species, island 
                      FROM penguins 
                     LIMIT 5''')))

Saída:

<class 'pandas.core.frame.DataFrame'>

Em pandas puros, seria:

print(penguins[['species', 'island']].head())

Saída:

   species island
0  Adelie  Torgersen
1  Adelie  Torgersen
2  Adelie  Torgersen
3  Adelie  Torgersen
4  Adelie  Torgersen

Outro exemplo é a extração de valores exclusivos de uma coluna:

print(sqldf('''SELECT DISTINCT species 
                 FROM penguins'''))

Saída:

     species
0     Adelie
1  Chinstrap
2     Gentoo

Em pandas, seria:

print(penguins['species'].unique())

Saída:

['Adelie' 'Chinstrap' 'Gentoo']

Classificação de dados com o pandasql

print(sqldf('''SELECT body_mass_g 
                 FROM penguins 
                ORDER BY body_mass_g DESC 
                LIMIT 5'''))

Saída:

   body_mass_g
0       6300.0
1       6050.0
2       6000.0
3       6000.0
4       5950.0

Acima, classificamos nossos pinguins por massa corporal em ordem decrescente e exibimos os cinco principais valores de massa corporal.

Em pandas, seria:

print(penguins['body_mass_g'].sort_values(ascending=False, 
ignore_index=True).head())

Saída:

0    6300.0
1    6050.0
2    6000.0
3    6000.0
4    5950.0
Name: body_mass_g, dtype: float64

Filtragem de dados com o pandasql

Vamos tentar o mesmo exemplo que mencionamos no capítulo Por que usar SQL em pandas: extrair as espécies únicas de pinguins que são machos e que têm nadadeiras maiores que 210 mm:

print(sqldf('''SELECT DISTINCT species
                 FROM penguins 
                WHERE sex = 'Male' 
                  AND flipper_length_mm > 210'''))

Saída:

     species
0  Chinstrap
1     Gentoo

Acima, filtramos os dados com base em duas condições: sex = 'Male' e flipper_length_mm > 210.

O mesmo código em pandas pareceria um pouco mais complicado:

print(penguins[(penguins['sex'] == 'Male') & (penguins['flipper_length_mm'] > 210)]['species'].unique())

Saída:

['Chinstrap' 'Gentoo']

Agrupamento e agregação de dados com o pandasql

Agora, vamos aplicar o agrupamento e a agregação de dados para encontrar o bico mais longo de cada espécie no quadro de dados:

print(sqldf('''SELECT species, MAX(bill_length_mm)
                 FROM penguins 
                GROUP BY species'''))

Saída:

     species  MAX(bill_length_mm)
0     Adelie                 46.0
1  Chinstrap                 58.0
2     Gentoo                 59.6

O mesmo código no pandas:

print(penguins[['species', 'bill_length_mm']].groupby('species', as_index=False).max())

Saída:

     species  bill_length_mm
0     Adelie            46.0
1  Chinstrap            58.0
2     Gentoo            59.6

Realização de operações matemáticas com o pandasql

Com o pandasql, podemos realizar facilmente operações matemáticas ou lógicas nos dados. Vamos imaginar que queremos calcular a relação entre o comprimento do bico e a profundidade de cada pinguim e exibir os cinco principais valores dessa medida:

print(sqldf('''SELECT bill_length_mm / bill_depth_mm AS length_to_depth
                 FROM penguins
                ORDER BY length_to_depth DESC
                LIMIT 5'''))

Saída:

   length_to_depth
0         3.612676
1         3.510490
2         3.505882
3         3.492424
4         3.458599

Observe que, desta vez, usamos o alias length_to_depth para a coluna com os valores de proporção. Caso contrário, teríamos uma coluna com um nome monstruoso: bill_length_mm / bill_depth_mm.

No pandas, precisaríamos primeiro criar uma nova coluna com os valores da proporção:

penguins['length_to_depth'] = penguins['bill_length_mm'] / penguins['bill_depth_mm']
print(penguins['length_to_depth'].sort_values(ascending=False, ignore_index=True).head())

Saída:

0    3.612676
1    3.510490
2    3.505882
3    3.492424
4    3.458599
Name: length_to_depth, dtype: float64

Conclusão

Para concluir, neste tutorial, exploramos por que e quando podemos combinar a funcionalidade do SQL para pandas para escrever um código melhor e mais eficiente. Discutimos como configurar e usar a biblioteca pandasql para essa finalidade e quais são as limitações desse pacote. Por fim, consideramos vários exemplos populares da aplicação prática do pandasql e, em cada caso, comparamos o código com sua contraparte do pandas.

Agora você tem tudo o que precisa para aplicar o SQL para pandas em projetos reais. Um ótimo lugar para sua prática é o Datacamp Workspace, que é um ambiente flexível e poderoso para realizar análises de dados e compartilhar insights com seus colaboradores.

Temas

Amplie suas habilidades

curso

Data Manipulation in SQL

4 hr
245.8K
Master the complex SQL queries necessary to answer a wide variety of data science questions and prepare robust data sets for analysis in PostgreSQL.
Ver DetalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

tutorial

Tutorial de como executar consultas SQL em Python e R

Aprenda maneiras fáceis e eficazes de executar consultas SQL em Python e R para análise de dados e gerenciamento de bancos de dados.
Abid Ali Awan's photo

Abid Ali Awan

13 min

tutorial

Tutorial de SQLAlchemy com exemplos

Aprenda a acessar e executar consultas SQL em todos os tipos de bancos de dados relacionais usando objetos Python.
Abid Ali Awan's photo

Abid Ali Awan

13 min

tutorial

Uso do PostgreSQL em Python

Descubra como criar, conectar-se e gerenciar bancos de dados PostgreSQL usando o pacote psycopg2 do Python.
Javier Canales Luna's photo

Javier Canales Luna

14 min

tutorial

Tutorial de seleção de colunas em Python

Use o Python Pandas e selecione colunas de DataFrames. Siga nosso tutorial com exemplos de código e aprenda diferentes maneiras de selecionar seus dados hoje mesmo!
DataCamp Team's photo

DataCamp Team

7 min

tutorial

Exemplos e tutoriais de consultas SQL

Se você deseja começar a usar o SQL, nós o ajudamos. Neste tutorial de SQL, apresentaremos as consultas SQL, uma ferramenta poderosa que nos permite trabalhar com os dados armazenados em um banco de dados. Você verá como escrever consultas SQL, aprenderá sobre
Sejal Jaiswal's photo

Sejal Jaiswal

21 min

tutorial

Tutorial do Python pandas: O guia definitivo para iniciantes

Você está pronto para começar sua jornada com os pandas? Aqui está um guia passo a passo sobre como você pode começar.
Vidhi Chugh's photo

Vidhi Chugh

15 min

See MoreSee More