26 Pandas
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[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.iteritems():
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.fillna(method = 'backfill')
- Par la valeur suivante
d5 = dataFrame.fillna(method = 'ffill')
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')