Jupyter Notebooks : #LIFEHACK exécuter du SQL sur des Dataframes Pandas directement dans une cellule magic

Aujourd’hui petit article un peu spécial, dans lequel je vous propose de vous montrer comment requêter des Dataframes Pandas en SQL !

Pour ce faire, il va falloir utiliser en plus de Pandas la librairie pandasql (https://pypi.org/project/pandasql/). Elle est plutôt simple à utiliser, par exemple :

import pandas as pd
import numpy as np
from pandasql import sqldf

df_customer = pd.DataFrame([
                        [1, 'Customer A', '123 Street', np.nan],
                        [2, 'Customer B', '444 Street', '333 Street'],
                        [3, 'Customer C', '444 Street', '666 Street']
                        ], 
                columns=['ID', 'Customer', 'Billing Address', 'Shipping Address'])

query = "select * from df_customer"				
sqldf(query, globals())

Ainsi vous aller créer d’abord vos Dataframes (“df_customer” dans l’exemple), puis exécuter une requête SQL dans un string via la commande “sqldf()” qui vous retournera le résultat sous forme d’un nouveau Dataframe. Donc c’est top si vous n’avez pas le courage d’apprendre comment transformer vos données avec le langage Pandas, et que vous maitriser déjà le SQL Open-mouthed smile. Attention, pandasql utilise la syntaxe de sqlite (https://www.sqlite.org/lang.html), donc pour les adeptes de SQL Server, c’est proche mais ce n’est pas exactement du TSQL.

Maintenant pour rendre l’usage de cette fonctionnalité encore plus interactive, on va utiliser et développer une classe custom magic afin de pouvoir lancer du code SQL dans une cellule de nos notebooks grâce au mot clé %%sql.

Pour cela, on va donc d’abord créer un script de classe python à côté appelé “sqlpandas.py”, qui contiendra le bout de code suivant :

from IPython.core.magic import line_magic, line_cell_magic, Magics, magics_class
import pandasql as ps

@magics_class
class sqlpandas(Magics):

   @line_cell_magic  
   def sql(self, line, cell=None):
        return ps.sqldf(cell or line, get_ipython().user_ns)

ip = get_ipython()
ip.register_magics(sqlpandas)

Voila ensuite comment utiliser tout cela dans un notebook Jupyter :

Vous voyez que c’est plutôt simple à utiliser et que cela fonctionne, il est même possible de récupérer les résultats d’une cellule dans un autre Dataframe. Retrouvez tous les bouts de code dans mon github ici : https://github.com/fabienadato/magicSQLJupyter 

Plus d’info sur les classes custom magic : https://ipython.readthedocs.io/en/stable/config/custommagics.html

FADATA

Fabien Adato est Customer Engineer Data et AI chez Microsoft. Après avoir intégré la société CGI Business Consulting où il rejoint une équipe dédiée à la Business Intelligence, il fait ses premières armes sur la solution Microsoft SQL Server. Pendant plus de 4 ans, il acquiert des compétences techniques et fonctionnelles sur toute la chaîne de valeur de la BI (ETL, Base de Données, Cube Olap et Rapport). Il a pu se spécialiser également sur de nouvelles technologies de la Data et notamment Hadoop, Pig et Hive, ainsi que des technologies self-service BI, le No-SQL comme la base de données MongoDB et le moteur d’indexation ElasticSearch. Il entre chez AZEO en 2014 puis Avanade en 2021 puis Microsoft en 2021 pour y assurer le poste de CE DATA / AI, autour des technologies Microsoft SQL Server, Power BI et Azure Data.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.