Vous êtes sur une version archivée de lyceum.fr de l'année 2023/2024. Revenir au présent.

Chapitre 2: Utilisation de la librairie pandas

Contenus Capacités attendues Commentaires
Tri d’une table Trier une table suivant une colonne. Une fonction de tri intégrée au système ou à une bibliothèque peut être utilisée.
Fusion de tables Construire une nouvelle table en combinant les données de deux tables. La notion de domaine de valeurs est mise en évidence.

L’utilisation des données en table étant très largement répandue, une bibliothèque spécialisée s’est développée et imposée dans le monde de python pandas. Cette libraire va grandement nous faciliter la lecture et l’utilisation des données.

pandas logo, used since version 1.0 (2020)
©  BSD via Wikimedia Commons

1 Lecture d’un fichier csv

La méthode read_csv permet la lecture d’un fichier csv. On utilise ici la Cartographie des stationnements deux roues de Nice mise à disposition sur le site gouvernemental: https://data.gouv.fr avec la description suivante:

Vous trouverez ici la cartographie des stationnements deux roues. Table des données SIG relatives aux GAV-GAM et GAV/GAM nb : GAV = Garage à Vélo + GAM = Garage à Moto Code profil 1 = GAM; Code profil 2 = GAV, Code profil 0 = GAV-GAM

import pandas as pd

# on importe les données dans un variable appelée df pour dataframe(le nom de la variable vous appartient)
df = pd.read_csv("gav-gam-06-09-2019.csv", sep=";")

# on affiche les 5 premières lignes
df.head(5)
NB_ARC_VL ID_GAV NB_PL_MT LARGEUR GLOBALID TYPE_MOBIL PROFIL LONGUEUR ETAT_ CODE_INSEE NB_PL_VL NB_PLACE NB_ARC_MT geometry
0 0.0 1001 30.0 0.65 {578A7D02-A426-4AA0-99C6-D2C1FBED8814} 4.0 1 21.2 En vigueur 6088 0.0 30.0 0 {"type": "Point", "coordinates": [7.21337219, ...
1 2.0 2010 3.0 2.00 {291C1D1B-2A1C-42B7-9D06-2877D62B2838} 1.0 0 7.5 En vigueur 6088 2.0 5.0 4 {"type": "Point", "coordinates": [7.25311445, ...
2 0.0 2015 12.0 2.00 {E002A4DF-3CD8-4F5F-9E87-721004924B1C} 1.0 1 26.0 En vigueur 6088 0.0 12.0 12 {"type": "Point", "coordinates": [7.25608087, ...
3 0.0 2020 3.0 2.00 {DD571B19-C522-4E1F-97E5-0841E6DE59E5} 2.0 0 4.7 En vigueur 6088 1.0 4.0 0 {"type": "Point", "coordinates": [7.25171699, ...
4 0.0 2024 7.0 2.00 {1710D778-67BF-45ED-B3F5-399B82088C5A} 2.0 0 12.0 En vigueur 6088 3.0 10.0 0 {"type": "Point", "coordinates": [7.25427638, ...

2 Exploration des données

On peut également facilement afficher le nom des colonnes avec l’attribut columns.

df.columns
Index(['NB_ARC_VL', 'ID_GAV', 'NB_PL_MT', 'LARGEUR', 'GLOBALID', 'TYPE_MOBIL',
       'PROFIL', 'LONGUEUR', 'ETAT_', 'CODE_INSEE', 'NB_PL_VL', 'NB_PLACE',
       'NB_ARC_MT', 'geometry'],
      dtype='object')

On peut facilement parcourir l’ensemble des lignes du tableau avec la méthode itertuples().

for ligne in df.itertuples():
    print(ligne)
    
    # On s'arrête à la troisième ligne pour pas encombrer le cours
    # Commenter ces deux lignes pour parcourir l'ensemble du tableau
    if ligne.Index > 2:
        break

>>sortie

Pandas(Index=0, NB_ARC_VL=0.0, ID_GAV='1001', NB_PL_MT=30.0, LARGEUR=0.65, GLOBALID='{578A7D02-A426-4AA0-99C6-D2C1FBED8814}', TYPE_MOBIL=4.0, PROFIL=1, LONGUEUR=21.2, ETAT_='En vigueur', CODE_INSEE=6088, NB_PL_VL=0.0, NB_PLACE=30.0, NB_ARC_MT=0, geometry='{"type": "Point", "coordinates": [7.21337219, 43.66717783]}')
Pandas(Index=1, NB_ARC_VL=2.0, ID_GAV='2010', NB_PL_MT=3.0, LARGEUR=2.0, GLOBALID='{291C1D1B-2A1C-42B7-9D06-2877D62B2838}', TYPE_MOBIL=1.0, PROFIL=0, LONGUEUR=7.5, ETAT_='En vigueur', CODE_INSEE=6088, NB_PL_VL=2.0, NB_PLACE=5.0, NB_ARC_MT=4, geometry='{"type": "Point", "coordinates": [7.25311445, 43.69461128]}')
Pandas(Index=2, NB_ARC_VL=0.0, ID_GAV='2015', NB_PL_MT=12.0, LARGEUR=2.0, GLOBALID='{E002A4DF-3CD8-4F5F-9E87-721004924B1C}', TYPE_MOBIL=1.0, PROFIL=1, LONGUEUR=26.0, ETAT_='En vigueur', CODE_INSEE=6088, NB_PL_VL=0.0, NB_PLACE=12.0, NB_ARC_MT=12, geometry='{"type": "Point", "coordinates": [7.25608087, 43.6951747]}')
Pandas(Index=3, NB_ARC_VL=0.0, ID_GAV='2020', NB_PL_MT=3.0, LARGEUR=2.0, GLOBALID='{DD571B19-C522-4E1F-97E5-0841E6DE59E5}', TYPE_MOBIL=2.0, PROFIL=0, LONGUEUR=4.7, ETAT_='En vigueur', CODE_INSEE=6088, NB_PL_VL=1.0, NB_PLACE=4.0, NB_ARC_MT=0, geometry='{"type": "Point", "coordinates": [7.25171699, 43.70004002]}')

Chaque ligne renvoyée par la méthode itertuples() est un tuple nommé, on peut ainsi aaccéder aux valeurs individuelles de chaque ligne avec la notation pointée ligne.nom_de_la_colonne. Par exemple pour afficher le nombre d’arcs du stationnement.

for ligne in df.itertuples():
    # On s'arrête à la troisième ligne pour pas encombrer le cours
    # Commenter ces deux lignes pour parcourir l'ensmble du tableau
    if ligne.Index > 2:
        break
    print("Nombre d'arcs de stationnement pour vélos:", ligne.NB_ARC_VL)

>>sortie

Nombre d'arcs de stationnement pour vélos: 0.0
Nombre d'arcs de stationnement pour vélos: 2.0
Nombre d'arcs de stationnement pour vélos: 0.0

3 Sélection logique de données

Supposons que l’on cherche des stationnements destinés aux vélos.

for ligne in df.itertuples():
    # On s'arrête à la troisième ligne pour pas encombrer le cours
    # Commenter ces deux lignes pour parcourir l'ensmble du tableau
    if ligne.Index > 2:
        break
    if ligne.NB_ARC_VL > 0:
        print(ligne.Index, ligne.NB_ARC_VL)

>>sortie

1 2.0

Effectivement parmi les trois premières lignes seul la ligne d’index 1(la deuxième) présente des arcs de stationnement pour vélos.

Pour explorer davantage cette table de données, passez aux exercices.

4 Liens

La librairie pandas est extrêmement riche et seul son utilisation sur des cas concrets permet d’en comprendre les rouages.

Pour plus d’informations, vous pouvez consulter: