Importation des tables¶

In [ ]:
#dossier
import os
os.chdir("C:/Users/ricco/Desktop/demo")

#table produits
import pandas
dfProd = pandas.read_excel("produits.xlsx")
dfProd.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 77 entries, 0 to 76
Data columns (total 5 columns):
 #   Column              Non-Null Count  Dtype  
---  ------              --------------  -----  
 0   Ref_produit         77 non-null     int64  
 1   Nom_produit         77 non-null     object 
 2   Num_fournisseur     77 non-null     int64  
 3   Quantite_par_unite  77 non-null     object 
 4   Prix_unitaire       77 non-null     float64
dtypes: float64(1), int64(2), object(2)
memory usage: 3.1+ KB
In [ ]:
#table fournisseurs
dfFour = pandas.read_excel("fournisseurs.xlsx")
dfFour.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 29 entries, 0 to 28
Data columns (total 5 columns):
 #   Column           Non-Null Count  Dtype 
---  ------           --------------  ----- 
 0   Num_fournisseur  29 non-null     int64 
 1   Societe          29 non-null     object
 2   Adresse          29 non-null     object
 3   Ville            29 non-null     object
 4   Pays             29 non-null     object
dtypes: int64(1), object(4)
memory usage: 1.3+ KB

Requêtes sur une table¶

In [ ]:
#liste des fournisseurs
dfFour
Out[ ]:
Num_fournisseur Societe Adresse Ville Pays
0 1 Exotic Liquids 49 Gilbert St. London Royaume-Uni
1 2 Nouvelle-Orléans Cajun Delights P.O. Box 78934 Nouvelle-Orléans Etats-Unis
2 3 Grandma Kelly's Homestead 707 Oxford Rd. Ann Arbor Etats-Unis
3 4 Tokyo Traders 9-8 Sekimai_x000D_\nMusashino-shi Tokyo Japon
4 5 Cooperativa de Quesos 'Las Cabras' Calle del Rosal 4 Oviedo Espagne
5 6 Mayumi's 92 Setsuko_x000D_\nChuo-ku Osaka Japon
6 7 Pavlova, Ltd. 74 Rose St._x000D_\nMoonie Ponds Melbourne Australie
7 8 Specialty Biscuits, Ltd. 29 King's Way Manchester Royaume-Uni
8 9 PB Knäckebröd AB Kaloadagatan 13 Göteborg Suède
9 10 Refrescos Americanas LTDA Av. das Americanas 12.890 São Paulo Brésil
10 11 Heli Süßwaren GmbH & Co. KG Tiergartenstraße 5 Berlin Allemagne
11 12 Plutzer Lebensmittelgroßmärkte AG Bogenallee 51 Frankfurt Allemagne
12 13 Nord-Ost-Fisch Handelsgesellschaft mbH Frahmredder 112a Cuxhaven Allemagne
13 14 Formaggi Fortini s.r.l. Viale Dante, 75 Ravenna Italie
14 15 Norske Meierier Hatlevegen 5 Sandvika Norvège
15 16 Bigfoot Breweries 3400 - 8th Avenue_x000D_\nSuite 210 Bend Etats-Unis
16 17 Svensk Sjöföda AB Brovallavägen 231 Stockholm Suède
17 18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France
18 19 New England Seafood Cannery Order Processing Dept._x000D_\n2100 Paul Rever... Boston Etats-Unis
19 20 Leka Trading 471 Serangoon Loop, Suite #402 Singapore Singapour
20 21 Lyngbysild Lyngbysild_x000D_\nFiskebakken 10 Lyngby Danemark
21 22 Zaanse Snoepfabriek Verkoop_x000D_\nRijnweg 22 Zaandam Pays-Bas
22 23 Karkki Oy Valtakatu 12 Lappeenranta Finlande
23 24 G'day, Mate 170 Prince Edward Parade_x000D_\nHunter's Hill Sydney Australie
24 25 Ma Maison 2960 Rue St. Laurent Montréal Canada
25 26 Pasta Buttini s.r.l. Via dei Gelsomini, 153 Salerno Italie
26 27 Escargots Nouveaux 22, rue H. Voiron Montceau France
27 28 Gai pâturage Bat. B_x000D_\n3, rue des Alpes Annecy France
28 29 Forêts d'érables 148 rue Chasseur Ste-Hyacinthe Canada
In [ ]:
#utilisation de PandaSQL
import pandasql as ps

#définition de la requête
str_req = "SELECT * FROM dfFour"

#exécution de la requête
res = ps.sqldf(str_req)

#type de résultat -> dataframe
type(res)
Out[ ]:
pandas.core.frame.DataFrame
In [ ]:
#affichage
res
Out[ ]:
Num_fournisseur Societe Adresse Ville Pays
0 1 Exotic Liquids 49 Gilbert St. London Royaume-Uni
1 2 Nouvelle-Orléans Cajun Delights P.O. Box 78934 Nouvelle-Orléans Etats-Unis
2 3 Grandma Kelly's Homestead 707 Oxford Rd. Ann Arbor Etats-Unis
3 4 Tokyo Traders 9-8 Sekimai_x000D_\nMusashino-shi Tokyo Japon
4 5 Cooperativa de Quesos 'Las Cabras' Calle del Rosal 4 Oviedo Espagne
5 6 Mayumi's 92 Setsuko_x000D_\nChuo-ku Osaka Japon
6 7 Pavlova, Ltd. 74 Rose St._x000D_\nMoonie Ponds Melbourne Australie
7 8 Specialty Biscuits, Ltd. 29 King's Way Manchester Royaume-Uni
8 9 PB Knäckebröd AB Kaloadagatan 13 Göteborg Suède
9 10 Refrescos Americanas LTDA Av. das Americanas 12.890 São Paulo Brésil
10 11 Heli Süßwaren GmbH & Co. KG Tiergartenstraße 5 Berlin Allemagne
11 12 Plutzer Lebensmittelgroßmärkte AG Bogenallee 51 Frankfurt Allemagne
12 13 Nord-Ost-Fisch Handelsgesellschaft mbH Frahmredder 112a Cuxhaven Allemagne
13 14 Formaggi Fortini s.r.l. Viale Dante, 75 Ravenna Italie
14 15 Norske Meierier Hatlevegen 5 Sandvika Norvège
15 16 Bigfoot Breweries 3400 - 8th Avenue_x000D_\nSuite 210 Bend Etats-Unis
16 17 Svensk Sjöföda AB Brovallavägen 231 Stockholm Suède
17 18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France
18 19 New England Seafood Cannery Order Processing Dept._x000D_\n2100 Paul Rever... Boston Etats-Unis
19 20 Leka Trading 471 Serangoon Loop, Suite #402 Singapore Singapour
20 21 Lyngbysild Lyngbysild_x000D_\nFiskebakken 10 Lyngby Danemark
21 22 Zaanse Snoepfabriek Verkoop_x000D_\nRijnweg 22 Zaandam Pays-Bas
22 23 Karkki Oy Valtakatu 12 Lappeenranta Finlande
23 24 G'day, Mate 170 Prince Edward Parade_x000D_\nHunter's Hill Sydney Australie
24 25 Ma Maison 2960 Rue St. Laurent Montréal Canada
25 26 Pasta Buttini s.r.l. Via dei Gelsomini, 153 Salerno Italie
26 27 Escargots Nouveaux 22, rue H. Voiron Montceau France
27 28 Gai pâturage Bat. B_x000D_\n3, rue des Alpes Annecy France
28 29 Forêts d'érables 148 rue Chasseur Ste-Hyacinthe Canada
In [ ]:
#liste des fournisseurs français
str_req = """SELECT *
             FROM dfFour
             WHERE Pays LIKE 'France'"""

#exécution
ps.sqldf(str_req)
Out[ ]:
Num_fournisseur Societe Adresse Ville Pays
0 18 Aux joyeux ecclésiastiques 203, Rue des Francs-Bourgeois Paris France
1 27 Escargots Nouveaux 22, rue H. Voiron Montceau France
2 28 Gai pâturage Bat. B_x000D_\n3, rue des Alpes Annecy France
In [ ]:
#liste des pays
str_req = """SELECT DISTINCT(Pays)
             FROM dfFour"""

#exécution
ps.sqldf(str_req)
Out[ ]:
Pays
0 Royaume-Uni
1 Etats-Unis
2 Japon
3 Espagne
4 Australie
5 Suède
6 Brésil
7 Allemagne
8 Italie
9 Norvège
10 France
11 Singapour
12 Danemark
13 Pays-Bas
14 Finlande
15 Canada
In [ ]:
#pays qui apparaissent plus d'une fois
str_req = """SELECT Pays,COUNT(PAYS) AS NbPays
             FROM dfFour
             GROUP BY Pays
             HAVING NbPays > 1"""

#exécution
ps.sqldf(str_req)
Out[ ]:
Pays NbPays
0 Allemagne 3
1 Australie 2
2 Canada 2
3 Etats-Unis 4
4 France 3
5 Italie 2
6 Japon 2
7 Royaume-Uni 2
8 Suède 2

Requêtes avec jointure¶

In [ ]:
#avec merge de Pandas
#liste des produits, dont le prix est > 50, et leurs fournisseurs
dfProd.merge(dfFour,how='left',on='Num_fournisseur').loc[dfProd.Prix_unitaire > 50,['Nom_produit','Societe','Prix_unitaire']]
Out[ ]:
Nom_produit Societe Prix_unitaire
8 Mishi Kobe Niku Tokyo Traders 97.00
17 Carnarvon Tigers Pavlova, Ltd. 62.50
19 Sir Rodney's Marmalade Specialty Biscuits, Ltd. 81.00
28 Thüringer Rostbratwurst Plutzer Lebensmittelgroßmärkte AG 123.79
37 Côte de Blaye Aux joyeux ecclésiastiques 263.50
50 Manjimup Dried Apples G'day, Mate 53.00
58 Raclette Courdavault Gai pâturage 55.00
In [ ]:
#en SQL
str_req = """SELECT A.Nom_produit, B.Societe, A.Prix_unitaire
             FROM dfProd A
             LEFT JOIN dfFour B
             ON A.Num_fournisseur = B.Num_fournisseur
             WHERE A.Prix_unitaire > 50"""

#exécution
ps.sqldf(str_req)
Out[ ]:
Nom_produit Societe Prix_unitaire
0 Mishi Kobe Niku Tokyo Traders 97.00
1 Carnarvon Tigers Pavlova, Ltd. 62.50
2 Sir Rodney's Marmalade Specialty Biscuits, Ltd. 81.00
3 Thüringer Rostbratwurst Plutzer Lebensmittelgroßmärkte AG 123.79
4 Côte de Blaye Aux joyeux ecclésiastiques 263.50
5 Manjimup Dried Apples G'day, Mate 53.00
6 Raclette Courdavault Gai pâturage 55.00