Python Pandas - Comparación con SQL

Dado que muchos usuarios potenciales de Pandas están familiarizados con SQL, esta página está destinada a proporcionar algunos ejemplos de cómo se pueden realizar varias operaciones de SQL utilizando 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()

Sus output es como sigue -

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

SELECCIONE

En SQL, la selección se realiza mediante una lista de columnas separadas por comas que seleccione (o un * para seleccionar todas las columnas) -

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

Con Pandas, la selección de columnas se realiza pasando una lista de nombres de columnas a su DataFrame -

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

Veamos el 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)

Sus output es como sigue -

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

Llamar al DataFrame sin la lista de nombres de columna mostrará todas las columnas (similar a SQL *).

DÓNDE

El filtrado en SQL se realiza mediante una cláusula WHERE.

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

Los DataFrames se pueden filtrar de varias formas; el más intuitivo es el uso de indexación booleana.

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

Veamos el 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)

Sus output es como sigue -

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

La declaración anterior pasa una serie de objetos True / False al DataFrame, devolviendo todas las filas con True.

Agrupar por

Esta operación obtiene el recuento de registros de cada grupo en un conjunto de datos. Por ejemplo, una consulta que nos muestre la cantidad de propinas dejadas por sexo:

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

El equivalente de Pandas sería:

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

Veamos el 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()

Sus output es como sigue -

sex
Female   87
Male    157
dtype: int64

N filas superiores

SQL devuelve el top n rows utilizando LIMIT -

SELECT * FROM tips
LIMIT 5 ;

El equivalente de Pandas sería:

tips.head(5)

Veamos el ejemplo 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

Sus output es como sigue -

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

Estas son las pocas operaciones básicas que comparamos y que aprendimos en los capítulos anteriores de la Biblioteca Pandas.