Les dataframes avec Python

Dataframes avec pandas (Python)

Plongeons ensemble dans l’univers des dataframes avec Python (on trouve aussi l’orthographe data frame, mais curieusement elle est plus habituelle avec R qu’avec Python ! Voir les data frames avec R).

Imaginez un tableau Excel super puissant, facile à manipuler, rapide et taillé pour faire parler les données : voilà ce qu’est un dataframe. Si vous souhaitez analyser un fichier CSV, nettoyer des données mal fichues ou construire un petit tableau statistique sans vous arracher les cheveux, vous êtes au bon endroit.

 

Création

D’abord, il faut installer la bibliothèque pandas.

Ensuite, première possibilité, on peut partir d’un dictionnaire.

import pandas as pd

data = {
"Ville": ["Lyon", "Marseille", "Bordeaux", "Caen"],
"Code": [69, 13, 33, 14],
"Département": ["Rhône", "Bouches-du-Rhône", "Gironde", "Calvados"]
}
df = pd.DataFrame(data)
print(df)

Marseille

Cependant, il est plus courant d’importer un fichier CSV.

import pandas as pd
df = pd.read_csv("data.csv")

À l’inverse, pour exporter de Python en CSV…

df.to_csv("nouveau.csv", index=False)

 

Exploration

Pour visualiser les premiers éléments (avec notre dataframe df) : df.head()

Pour obtenir des informations sur les données : df.info()

Dimensions (nombre de lignes et de colonnes) : df.shape

Exemple :

import pandas as pd

df = pd.read_csv("data.csv")
print(df.head(2))
df.info()
print(df.shape)

On obtient ceci (copie d’écran VS Code) :

sortie

 

Accès aux données et conditions

Accès à une donnée en particulier, avec ses numéros de ligne et de colonne : df.ilog[n,m]. Par exemple, si l’on souhaite connaître la valeur de la deuxième ligne et de la troisième colonne : print(df.iloc[1,2]) (n’oubliez pas que Python compte à partir de zéro !). On lit Bouches-du-Rhône.

Vous pouvez aussi donner le nom du champ (non pas avec iloc mais avec loc). En l’occurrence, df.loc[1,"Département"] donne le même résultat.

Exemple pour afficher la colonne des départements : print(df["Département"])

départements

Pour afficher les villes et les codes : print(df[["Ville","Code"]])

Pour afficher les trois premières lignes : print(df.iloc[0:3]) (soit trois lignes à partir de la numéro zéro).

Filtrons par exemple les enregistrements dont le code est supérieur à 30 (pour les besoins de l’exemple, ils ont été entrés en numérique) : df[df["Code"]>30]

On peut bien sûr filtrer de façon plus complexe. Si nous souhaitons obtenir les enregistrements dont le code est supérieur à 30 mais sans Bordeaux :

condition = (df["Code"]>30) & (df["Ville"] != "Bordeaux")
print(condition)

Ce script permet d’obtenir :

Script

 

Modifications

Exemple de modification d’une valeur : df.loc[1,"Ville"] = "Arles"

Exemple de conversion d’une colonne en texte : df["Code"] = df["Code"].astype(str)

Une fois cette conversion réalisée, on peut concaténer cette colonne avec une autre de type texte : df["Lieu"] = df["Ville"] + " (" + df["Code"] + ")"

Ici, nous avons même ajouté deux parenthèses. Notez qu’avec pandas, il existe des façons plus « propres » de concaténer ; mais nous en resterons à cette technique simple.

Suppression d’une ligne : df = df.drop(index = 3)

Suppression d’une ou de plusieurs colonnes : df = df.drop(columns = ["Code","Ville"])

Récapitulons.

import pandas as pd

df = pd.read_csv("data.csv")
df.loc[1,"Ville"] = "Arles"
df["Code"] = df["Code"].astype(str)
df["Lieu"] = df["Ville"] + " (" + df["Code"] + ")"
df = df.drop(index = 3)
df = df.drop(columns = ["Code","Ville"])
print(df)

Renommage de colonne : df = df.rename(columns = {"Lieu":"Commune"})

Tri : df.sort_values(by = "Département", ascending = False)

Ici, l’ordre est décroissant. Quant à l’ordre croissant, il est sélectionné par défaut mais vous pouvez aussi écrire ascending = True.

 

échecs