Python Pandas - Comparaison avec SQL

Étant donné que de nombreux utilisateurs potentiels de Pandas ont une certaine familiarité avec SQL, cette page est destinée à fournir des exemples de la manière dont diverses opérations SQL peuvent être effectuées à l'aide de 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()

Ses output est comme suit -

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

SÉLECTIONNER

En SQL, la sélection se fait à l'aide d'une liste de colonnes séparées par des virgules que vous sélectionnez (ou d'un * pour sélectionner toutes les colonnes) -

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

Avec Pandas, la sélection des colonnes se fait en passant une liste de noms de colonnes à votre DataFrame -

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

Vérifions le programme complet -

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)

Ses output est comme suit -

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

L'appel du DataFrame sans la liste des noms de colonne affichera toutes les colonnes (semblable à SQL *).

Le filtrage en SQL se fait via une clause WHERE.

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

Les DataFrames peuvent être filtrés de plusieurs manières; le plus intuitif est l'utilisation de l'indexation booléenne.

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

Vérifions le programme complet -

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)

Ses output est comme suit -

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

L'instruction ci-dessus transmet une série d'objets True / False au DataFrame, renvoyant toutes les lignes avec True.

Par groupe

Cette opération récupère le nombre d'enregistrements dans chaque groupe dans un ensemble de données. Par exemple, une requête nous récupérant le nombre de pourboires laissés par sexe -

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

L'équivalent Pandas serait -

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

Vérifions le programme complet -

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

Ses output est comme suit -

sex
Female   87
Male    157
dtype: int64

N premières rangées

SQL renvoie le top n rows en utilisant LIMIT -

SELECT * FROM tips
LIMIT 5 ;

L'équivalent Pandas serait -

tips.head(5)

Vérifions l'exemple complet -

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

Ses output est comme suit -

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

Ce sont les quelques opérations de base que nous avons comparées, que nous avons apprises dans les chapitres précédents de la bibliothèque Pandas.