17 - Pandas (ouverture)
Introduction
Pandas est l’une des bibliothèques Python les plus utilisées pour l’analyse de données. On l’importe avec la commande suivante :
import pandas as pd
Objet Series
Un objet Series est un vecteur colonne. C’est un objet mutable. Cela
signifie qu’il peut être mis à jour, que de nouveaux éléments peuvent être
ajoutés et que des éléments existants peuvent être supprimés. Il peut contenir
des données de tout type (nombres, caractères, etc.). Il peut être instancié
avec une liste ou un dictionnaire. Les clés du dictionnaire sont utilisées
pour représenter les indices.
Créer un objet Series
ma_serie = pd.Series(data=[111, 222, 333], index=["un", "deux", "trois"])
autre_serie = pd.Series([444, 555, 666])
Récupérer des données d’une Series
ma_serie["deux"]
ma_serie.iloc[0]
ma_serie[["un","trois"]]
autre_serie[0]
autre_serie[[1, 2]]
Objet DataFrame
Le DataFrame est la structure de données la plus utilisée. C’est un tableau
avec des lignes et des colonnes, comme une table SQL ou une feuille de calcul
Excel. Le tableau peut stocker en mémoire des données dans des formats
différents. Un DataFrame se comporte comme un dictionnaire dont les clés
sont les noms des colonnes et les valeurs sont des Séries. C’est un objet
mutable.
Créer un DataFrame
Il existe plusieurs façons de créer un DataFrame :
- à partir d’une liste, d’un dictionnaire ;
- à partir d’une
Series; - à partir d’un autre
DataFrame.
d = {"colonneA": ma_serie, "colonneB": pd.Series([444, 555, 666])}
df = pd.DataFrame(d)
Le DataFrame ci-dessus contient deux colonnes nommées ColonneA et ColonneB :
- La colonne A contiendra trois lignes: 111, 222 et 333 (disposant, chacune, d’une étiquette).
- La colonne B contiendra trois lignes: 444,555 et 666 (sans étiquette).
Sélection de colonnes
On peut utiliser le nom de la colonne pour obtenir les données :
colonne = df["colonneA"]
Pour supprimer une colonne, on utilise la fonction pop.
col_suppr = df.pop("colonneB") # retourne la colonne supprimée
Sélection de lignes
Si une ligne a une étiquette, on peut utiliser la fonction loc:
ligne = df.loc["un"] # une seule ligne
lignes = df.loc[["deux", "trois"]] # plusieurs lignes
Sinon, on peut également utiliser la position en utilisant la fonction iloc :
ligne_bis = df.iloc[0] # retourne la ligne d'indice 0 ou position 1
Pour supprimer une ligne, on utilise la fonction drop.
df_sans_ligne_un = df.drop("un") # retourne le DataFrame sans la ligne "un"
Itérer sur les colonnes d’un DataFrame
for colonne in df:
print(colonne)
On peut également parcourir les éléments d’un DataFrame:
for colonne, items in df.items():
print(colonne, items)
Parcourir les lignes d’un DataFrame
for indice_ligne, ligne in df.iterrows():
print(indice_ligne, ligne)
itertuples() est utilisé pour afficher chaque ligne en tant qu’objet :
for ligne in df.itertuples():
print(ligne)
Trier par lignes
On peut trier par indice de lignes :
tri_df_par_lignes = df.iloc[[0, 1, 2]].sort_index()
Trier par colonnes
On peut utiliser la méthode sort_index(axis = 1) pour trier par colonnes.
tri_df_par_lignes = df.iloc[[0, 1, 2]].sort_index(axis = 1)
On peut également utiliser sort_values(by="liste de colonnes") pour trier par nombre de colonnes :
tri_df_par_valeurs = df.sort_values(by="colonneA")
Les fonctions qu’on applique habituellement sur des chaînes de caractères peuvent également l’être sur des colonnes ou des lignes d’un DataFrame, telles que lower(), upper(), len(), strip(), etc.
Fonctionnalités de base
Lire un fichier CSV
On peut créer un DataFrame à partir d’un fichier csv.
dataFrame = pd.read_csv(
"un_fichier.csv",
encoding="utf8",
skiprows=1,
names=["nom", "age", "ville", "nbre_enfants", "nbre_animaux"],
)
Head
On utilise head(n) pour retourner les \(n\) premières lignes d’un DataFrame:
premieres = dataFrame.head(2)
Tail
On utilise tail(n) pour retourner les \(n\) dernières lignes d’un DataFrame:
dernieres = dataFrame.tail(2)
Valeurs manquantes
Vérifier les valeurs manquantes
d1 = dataFrame.notnull()
Supprimer les valeurs manquantes
d2 = dataFrame.dropna()
Remplacer les valeurs manquantes
Par une valeur fixée
d3 = dataFrame.fillna(0)On peut également passer un dictionnaire et utiliser la méthode
replace()pour remplacer les éléments par la valeur remplacée.
Par la valeur précédente
d4 = dataFrame.ffill()
Par la valeur suivante
d5 = dataFrame.bfill()
Transposée et attributs
Pour échanger les lignes par les colonnes et vice versa, on utilise l’attribut T:
transpose = dataFrame.T
On peut également appliquer à un DataFrame, les attributs auivants :
shapequi retourne la dimension duDataFrame(nombre de lignes et colonnes) ;sizequi donne le nombre d’éléments ;ndimqui donne le nombre d’axes.
dataFrame.shape
dataFrame.size
dataFrame.ndim
Describe et indicateurs statistiques
Pour obtenir un résumé rapide de votre DataFrame (moyenne, écart-type, minimum, maximum et d’autres informations pour chacune des colonnes du DataFrame), on utilise la méthode describe() :
dataFrame.describe()
Un DataFrame offre également un certain nombre de fonctions statistiques telles que :
abs(): valeur absoluemean(): Valeur moyenne. On a aussimedian()etmode()min(): valeur minimale (etmax())count(): effectif totalstd(): écart typeprod(): calcul le produit des valeurscumsum(): calcule les sommes cumulées
Graphiques
Les DataFrames offrent des options pour tracer des graphiques. On peut tracer des courbes, des boîtes à moustaches, des surfaces, des nuages de points, des graphiques empilés, des diagrammes à barres, des histogrammes, etc.
import matplotlib.pyplot as plt
d2.plot(kind = 'scatter', x = 'nbre_enfants', y = 'nbre_animaux', color = 'red')
d2.plot(kind = 'bar', x = 'nom', y = 'age')
# gca signifie 'get current axis'
ax = plt.gca()
d2.plot(kind = 'line', x = 'nom', y = 'nbre_enfants', ax = ax)
d2.plot(kind = 'line', x = 'nom', y = 'nbre_animaux', color='red', ax = ax)
d2.groupby('ville')['nom'].nunique().plot(kind = 'bar')