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

Chapitre 2: Utilisation de la librairie pandas


Programme Officiel

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.

Lien vers le programme complet

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 grandemant nous faciliter la lecture et l'utilisation des données.

Lecture d'un fichier csv

Par exemple la lecture csv à partir d'une url, 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


Entrée
import pandas as pd

# on importe les données dans un variable appelée df pou dataframe(le nom de la variable vous appartient)
df = pd.read_csv("https://www.data.gouv.fr/fr/datasets/r/d2adbc7e-8526-43f8-9b30-51dc44f1b430", sep=";")

# on affiche les 5 premières lignes
df.head(5)
Résultat
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, ...

Exploration des données

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


Entrée
df.columns
Résultat
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().


Entrée
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(ligne)
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]}')

Chaque ligne renvoyée par la méthode itertuples() est un tuple nommé, on peut ainsi accéder accé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.


Entrée
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

Sélection logique de données

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


Entrée
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.

Liens

La librairie pandas est extrémemnt riche et seul son utilisation sur des cas concrets permet d'en comprendre les rouages.

Pour plus d'informations, vous pouvez consulter: