Python Pandas - comparação com SQL

Uma vez que muitos usuários potenciais do Pandas têm alguma familiaridade com SQL, esta página tem como objetivo fornecer alguns exemplos de como várias operações SQL podem ser realizadas usando o pandas.

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips.head()

Está output é o seguinte -

total_bill   tip      sex  smoker  day     time  size
0        16.99  1.01   Female      No  Sun  Dinner      2
1        10.34  1.66     Male      No  Sun  Dinner      3
2        21.01  3.50     Male      No  Sun  Dinner      3
3        23.68  3.31     Male      No  Sun  Dinner      2
4        24.59  3.61   Female      No  Sun  Dinner      4

SELECIONE

No SQL, a seleção é feita usando uma lista separada por vírgulas de colunas que você seleciona (ou um * para selecionar todas as colunas) -

SELECT total_bill, tip, smoker, time
FROM tips
LIMIT 5;

Com o Pandas, a seleção de colunas é feita passando uma lista de nomes de colunas para seu DataFrame -

tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

Vamos verificar o programa completo -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'
 
tips=pd.read_csv(url)
print tips[['total_bill', 'tip', 'smoker', 'time']].head(5)

Está output é o seguinte -

total_bill   tip  smoker     time
0       16.99  1.01      No   Dinner
1       10.34  1.66      No   Dinner
2       21.01  3.50      No   Dinner
3       23.68  3.31      No   Dinner
4       24.59  3.61      No   Dinner

Chamar o DataFrame sem a lista de nomes de coluna exibirá todas as colunas (semelhante a * do SQL).

ONDE

A filtragem em SQL é feita por meio de uma cláusula WHERE.

SELECT * FROM tips WHERE time = 'Dinner' LIMIT 5;

Os DataFrames podem ser filtrados de várias maneiras; o mais intuitivo deles é usar a indexação booleana.

tips[tips['time'] == 'Dinner'].head(5)

Vamos verificar o programa completo -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips[tips['time'] == 'Dinner'].head(5)

Está output é o seguinte -

total_bill   tip      sex  smoker  day    time  size
0       16.99  1.01   Female     No   Sun  Dinner    2
1       10.34  1.66     Male     No   Sun  Dinner    3
2       21.01  3.50     Male     No   Sun  Dinner    3
3       23.68  3.31     Male     No   Sun  Dinner    2
4       24.59  3.61   Female     No   Sun  Dinner    4

A instrução acima passa uma série de objetos True / False para o DataFrame, retornando todas as linhas com True.

GroupBy

Esta operação busca a contagem de registros em cada grupo em um conjunto de dados. Por exemplo, uma consulta que nos busca o número de dicas deixadas por sexo -

SELECT sex, count(*)
FROM tips
GROUP BY sex;

O equivalente Pandas seria -

tips.groupby('sex').size()

Vamos verificar o programa completo -

import pandas as pd

url = 'https://raw.github.com/pandasdev/
pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
print tips.groupby('sex').size()

Está output é o seguinte -

sex
Female   87
Male    157
dtype: int64

N principais linhas

SQL retorna o top n rows usando LIMIT -

SELECT * FROM tips
LIMIT 5 ;

O equivalente Pandas seria -

tips.head(5)

Vamos verificar o exemplo completo -

import pandas as pd

url = 'https://raw.github.com/pandas-dev/pandas/master/pandas/tests/data/tips.csv'

tips=pd.read_csv(url)
tips = tips[['smoker', 'day', 'time']].head(5)
print tips

Está output é o seguinte -

smoker   day     time
0      No   Sun   Dinner
1      No   Sun   Dinner
2      No   Sun   Dinner
3      No   Sun   Dinner
4      No   Sun   Dinner

Estas são as poucas operações básicas que comparamos, que aprendemos nos capítulos anteriores da Biblioteca Pandas.