SQL vs Pandas - Operações Básicas
Neste artigo vamos fazer uma comparação entre os comandos básicos de um banco de dados relacional SQL e os mesmos comandos do Pandas.
Pandas é uma biblioteca Open Source da linguagem de programação Python. Ela possui uma grande quantidade de funções fáceis de usar e estruturas de dados rápidas e flexíveis.
No SQL usamos consultas para acessar dados. No Pandas utilizamos para o mesmo fim os chamados dataframes.
Este artigo considera que você já possui um conhecimento básico de SQL e está dando os seus primeiros passos na utilizadação do Pandas.
O que você vai aprender neste artigo?
* Ver a descrição dos campos de sua estrutura de dados.
* Listar os cinco primeiros registros.
* Selecionar as colunas que deseja retornar
* Ordenar resultados
* Retornando registros que atendam a uma certa condição
* Valores únicos
* Contando valores únicos.
* Agrupamento de resultados.
* Funções de agregação
Vamos começar!
Ver a descrição dos campos de sua estrutura de dados.
No SQL você pode utilizar o comando DESC.
DESC <<nome da tabela>>
No Pandas você pode usar o método describe().
dataset.describe()
Listar os cinco primeiros registros.
No SQL, dependendo da versão, você pode listar os cinco primeiros registros da seguinte forma:
MySQL
SELECT * from minha_tabela LIMIT 5;
SQL Server
SELECT TOP 5 * from minha_tabela;
No Pandas você pode utilizar o método head(), ele serve para fazer o preview dos dados do dataset.
dataset.head()
Por padrão head retorna os cinco primeiros registros, mas ele aceita receber um parâmetro, onde você pode informar quantos registros deseja retornar
dataset.head(10)
Selecionar as colunas que deseja retornar
No SQL o caractere coringa * retorna todos os registros da tabela, mas se este não é o nosso objetivo, podemos informar os campos que queremos separados por vírgula
SELECT campo1, campo2 FROM minha_tabela
No Pandas, temos que enviar para o nosso dataset um array contendo os campos desejados
dataset[["campo1", "campo2", "campo3"]]
Ordenar resultados
Para ordenar registros no SQL utilizamos a cláusula ORDER BY
SELECT * FROM minha_tabela ORDER BY campo1
No Pandas o mesmo pode ser obtivo utilizando o método sort_values
dataset.sort_values("campo1")
Retornando registros que atendam a uma certa condição
No SQL sabemos que podemos usar WHERE para especificar quais registros queremos retornar
SELECT * from minha_tabela WHERE campo1 > 50
No Pandas podemos fazer algo parecido, enviando para o dataset como parâmetro o filtro desejado.
dataset[dataset.campo1 >= 50]
Se for necessário retornar apenas algumas colunas, nossas consultas ficariam da seguinte forma:
SQL
SELECT campo2, campo3 from minha_tabela WHERE campo1 > 50
Pandas
dataset[dataset.campo1 >= 50][["campo2", "campo3"]]
Valores únicos
No SQL uma das formas de retornar valores únicos é utilizar a cláusula DISTINCT
SELECT DISTINCT campo1 FROM minha_tabela
Já no Pandas para atingir o mesmo resultado podemos usar o nome do campo seguido do método unique().
dataset.campo1.unique()
Contando valores únicos.
Esta é uma continuação do exemplo anterior. Ao invés de retornar os valores distintos de uma certa coluna, nossa necessidade pode ser saber apenas qual a quantidade. No SQL podemos usar COUNT junto com o DISTINCT
SELECT COUNT(DISTINCT campo1) FROM minha_tabela
No Pandas podemos usar o nome do campo seguido do método nunique().
dataset.campo1.nunique()
Agrupamento de resultados.
No SQL costumamos usar GROUP BY para agrupar resultados, junto com alguma função de agregação. Se por exemplo temos uma tabela contendo alunos com os campos nome, cidade e e-mail, podemos contar a quantidade de alunos por cidade desta forma:
SELECT cidade, COUNT(*) from alunos GROUP BY cidade
Se tivermos um dataset com as mesmas colunas, o Pandas nos permite chegar no mesmo resultado utilizado o método value_counts().
dataset.cidade.value_counts()
Funções de agregação
No SQL, junto com o GROUP BY, podemos usar funções de agregação, estas funções são as seguintes:
Sum - Soma os valores.
Avg - Retorna a média.
Min - Retorna o menor valor.
Max - Retorna o maior valor.
Estas funções também pode ser utilizadas sem o GROUP BY, se o nosso objetivo é apenas retornar um valor.
Vamos ver como estas funções são utilizadas no SQL e no Pandas.
Soma
SQL
SELECT SUM(campo1) FROM minha_tabela
Pandas
dataset.campo1.sum()
Média
SQL
SELECT AVG(campo1) FROM minha_tabela
Pandas
dataset.campo1.mean()
Menor valor
SQL
SELECT MIN(campo1) FROM minha_tabela
Pandas
dataset.campo1.min()
Maior valor
SQL
SELECT MAX(campo1) FROM minha_tabela
Pandas
dataset.campo1.max()
Como vimos nos exemplos anteriores, no Pandas utilizamos os métodos sum, mean, min e max. Com exceção do nome "mean", os outros nomes são semelhantes aos usados no SQL.