Aide Memoire Pandas

Pour exceller en Analyse de Données / Data Science / Machine Learning avec Python, Pandas est une bibliothèque que VOUS devez maîtriser. Voici une antisèche ou un glossaire de certaines des syntaxes les plus utilisées que vous devez connaître sur le bout des doigts ! Vous pouvez sélectionner, à partir de la table des matières ci-dessous, la partie qui vous intéresse de ce mémo Pandas pour le traitement de données.

Aujourd’hui, le paquet Pandas est l’outil le plus fondamental (et de loin) dans le domaine de la Data Science et de l’analyse de données en Python. Les puissants outils de Machine Learning et de visualisation de données très glamours ont peut-être attiré votre attention ou aiguisé votre curiosité, mais vous n’irez pas loin si vous n’avez pas de bonnes compétences sur la bibliothèque Pandas.

C’est pourquoi, j’ai rassemblé pour vous certaines des fonctions de base de Pandas les plus utilisées. Je commencerai par la création du fameux DataFrame (ou table de données), puis je poursuivrai avec le reshaping des données, puis la recherche de chaînes de caractères, le tri des valeurs, etc.

C’est parti !

Création d’un DataFrame

Je pense qu’il est utile de mentionner la structure de base du DataFrame de Pandas. Lorsqu’il s’agit de données, dans la plupart des cas, vous aurez des variables et les valeurs observées de vos variables. Dans Pandas, chaque variable est stockée sous forme de colonne, tandis que toutes les observations liées à cette variable sont stockées sous forme de lignes. Par exemple, si vous avez 20 observations pour une variable A, dans Pandas elle sera présentée comme une « Colonne A » avec 20 lignes de données.

Création d’un DataFrame vide

import pandas as pd

# 4 îles des Canaries
col = ['Lanzarote','Fuerteventura', 'La Gomera', 'El Hierro']
df = pd.DataFrame(columns=col)
df

Retourne une liste vide :

Lanzarote	Fuerteventura	La Gomera	El Hierro

Création d’un DataFrame à partir d’une liste

col = ['Lanzarote','Fuerteventura', 'La Gomera', 'El Hierro']
ind = [2000,2010,2020]
data = [['98731','34444','99384','654'],['34323','44243','88543','3451'],['2222','4324','3432','19344']]
df = pd.DataFrame(data, columns=col, index=ind)
df

Retourne :

Mémo Pandas pour le traitement de données - Création DataFrame à partir d'une liste

Création d’un DataFrame à partir d’un dictionnaire

data = {'A':[98731,34444,99384],'B':[34323,44243,88543],'C':[2222,4324,None]}
df = pd.DataFrame(data)
df
Mémo Pandas pour le traitement de données - Création DataFrame à partir d'un dictionnaire

On utilise « None » pour représenter une valeur vide dans Pandas.

Renommer une colonne

df = df.rename(columns={'A':'Lanzarote'})
df

Retourne :

Mémo Pandas pour le traitement de données - Renommer une colonne

Insertion

Insertion de colonne

# insertion de la colonne D
d = ['x','y','z']

df['D'] = d
df

Retourne :

Mémo Pandas pour le traitement de données - Insertion de colonne

Insertion de ligne

# Insertion de la 4ème ligne
new_row = {'Lanzarote':98989, 'B':77889, 'C':None, 'D' :'z'}

df = df.append(new_row, ignore_index=True)
df
Mémo Pandas pour le traitement de données - Insertion de ligne

Suppression

Retirer une colonne

Pour retirer plusieurs colonnes, vous pouvez utiliser une liste. Par exemple df.drop(["C", "B"],axis=1).
Pour effectuer un changement permanent, vous pouvez ré-écrire par dessus la variable df = df.drop(...)

# Suppression de la colonne C uniquement

df.drop('C',axis=1)
Mémo Pandas pour le traitement de données - Retirer une colonne

Retirer une ligne

# Suppression d'une ligne avec l'index "0"

df.drop(0)
Mémo Pandas pour le traitement de données - Retirer une ligne

Éliminer les doublons

df.drop_duplicates()

Notre DataFrame df reste le même, car nous n’avons pas de doublon ici.

Traitement des valeurs manquantes

Le plus souvent, nous avons des valeurs nulles (ou vides) dans nos données. En général, nous allons soit supprimer ces valeurs manquantes, soit les remplacer par d’autres valeurs significatives, par exemple la moyenne de la colonne.

Vérifier les valeurs nulles

pd.isnull(df)
Mémo Pandas pour le traitement de données - Vérifier les valeurs nulles

On peut voir qu’il y a 2 valeurs nulles dans la colonne C.

Localiser les valeurs nulles horizontalement

# vérifier horizontalement, de la première colonne à la dernière

pd.isnull(df).any(axis=0)
Mémo Pandas pour le traitement de données - Localiser les valeurs nulles horizontalement

Localiser les valeurs nulles verticalement

# vérifier verticalement, de l'indice 1 à 4

pd.isnull(df).any(axis=1)
Mémo Pandas pour le traitement de données - Localiser les valeurs nulles verticalement

Remplir tous les NaN avec des valeurs significatives

df2 = df.copy()

df3 = df2.fillna(0) # remplir avec 0

df4 = df2.fillna(df.mean()) # remplir avec la moyenne de la colonne

df5 = df2.fillna(df.B.max()) # remplir avec le max de la colonne B
Mémo Pandas pour le traitement de données - Remplir tous les NaN avec des valeurs significatives

Dans ce cas, il semble que le plus raisonnable soit de remplir les valeurs NaN de la colonne C avec la moyenne de sa propre colonne.

Reshaping

La forme (ou dimension) des données est un autre problème courant auquel un data scientist doit faire face. Comme chaque modèle de Machine Learning a des exigences différentes en matière de forme/dimension des données, nous devons re-modeler les données en fonction des exigences du modèle. Par exemple, mon modèle LSTM préféré prend en compte les données tridimensionnelles, nous devons donc transformer la plupart des données bi-dimensionnelles en données tri-dimensionnelles.

Rassembler toutes les colonnes en une seule

# rassembler toutes les colonnes, et toutes les observations en une seule colonne

pd.melt(df2)
Mémo Pandas pour le traitement de données - Rassembler toutes les colonnes en une seule

Concat – empilage

Cette fonction est similaire à UNION ALL de la syntaxe SQL. Elle empile les valeurs ayant le même nom de colonne.

# joindre verticalement

pd.concat([df,df])
Mémo Pandas pour le traitement de données - Concat (empilage)

Concat – côte à côte

# joindre horizontalement

pd.concat([df,df], axis=1)
Mémo Pandas pour le traitement de données - Concat (côte à côte)

Groupby

Il s’agit d’une technique terriblement populaire qui apparaît dans de nombreux langages informatiques. Dans l’exemple ci-dessous, nous regroupons les données par les lettres dans la colonne D, et ne montrons que les valeurs de la somme de chacune d’entre elles dans la colonne B.

# SELECT B, SUM(B) FROM df GROUP BY D ORDER BY B

df.groupby('D')['B'].sum()
Mémo Pandas pour le traitement de données - Groupby

Observation basique des données

Après le brassage et la transformation des données, il est temps de vérifier ce que nous avons fait.

Imprimer les premières lignes

# la valeur par défaut est 5 si vous laissez la parenthèse vide.
# nous affichons les 3 premières lignes seulement

df.head(3)
Mémo Pandas pour le traitement de données - Head

Imprimer les dernières lignes

# la valeur par défaut est 5 si vous laissez la prenthèse vide.
# nous montrons les 2 dernières lignes seulement

df.tail(2)
Mémo Pandas pour le traitement de données - Tail

Imprimer aléatoirement quelques lignes

# échantillonnage aléatoire de seulement 50% de l'ensemble des données

df.sample(frac=0.5)
Mémo Pandas pour le traitement de données - Imprimer aléatoirement quelques lignes

Imprimer un résumé concis d’un DataFrame

df.info()
Mémo Pandas pour le traitement de données - Summary

Générer des statistiques descriptives

Il s’agit d’une méthode simple et pratique pour repérer visuellement les variables qui ont des valeurs aberrantes (outliers).

# décrit uniquement les colonnes numériques. La colonne D est une colonne de chaînes de caractères, donc rien n'est montré.

df.describe()
Mémo Pandas pour le traitement de données - Statistiques

Requête / Récupération de données

Après avoir obtenu la forme/shape de dataframe dont nous avons besoin, nous voulons récupérer les informations de ces données. La fonction query est l’une des fonctions les plus utilisées dans Pandas pour l’extraction de données.

Triage

Pandas partage également certaines caractéristiques de SQL. Dans le tri, la valeur par défaut est ascendante, ce qui est similaire à ce que l’on trouve dans ORDER IN de SQL.

# trier les valeurs en fonction de Lanzarote
# par défaut, c'est ascendant

df.sort_values('Lanzarote', ascending=False)
Mémo Pandas pour le traitement de données - Triage

Réinitialisation de l’index

Très souvent, après un tri, nous devons réinitialiser l’index aux indices de ligne.
Voici la syntaxe pour cela :

df.reset_index()

Condition unique

# renvoie un DataFrame avec une condition : B doit être supérieur ou égal à 50000

df.query('B >= 50000')
Mémo Pandas pour le traitement de données - Condition unique

La syntaxe ci-dessous donne le même résultat, mais la récupération est différente.

df[df['B']>=50000]

Au lieu d’imprimer la totalité du DataFrame, l’opération suivante permet de récupérer la colonne C uniquement.

df.C[df['B']>=50000]
Mémo Pandas pour le traitement de données - Récupération colonne C

Seules 2 lignes de la colonne C sont imprimées.

Conditions multiples – « ET »

# renvoie un DataFrame avec 2 conditions : B doit être supérieur ou égal à 50000, et 'Lanzarote' doit être inférieur à 99000

df[(df['B']>=50000) & (df['Lanzarote'] < 99000)] # pas de "AND"
Mémo Pandas pour le traitement de données - Conditions multiples ET

Conditions multiples – « OU »

# renvoie un DataFrame avec 2 conditions : B doit être supérieur ou égal à 50000, ou 'Lanzarote' doit être inférieur à 49000

df[(df['B']>=50000) | (df['Lanzarote'] < 49000)] # pas de "OR"
Mémo Pandas pour le traitement de données - Conditions multiples OU

Correspondances de chaînes

Pour trouver une occurrence de chaîne dans un ensemble de données, nous pouvons utiliser str.find() ou str.contains(). La méthode str.find() renvoie une valeur entière. Si la sous-chaîne existe dans la chaîne, elle renvoie l’index de la première occurrence de la sous-chaîne. Si la sous-chaîne n’existe pas dans la chaîne, elle renvoie -1.

Pour le str.contains, il renvoie les valeurs booléennes True ou False.

# Dans la colonne D, vérifiez si "z" existe

print(df['D'].str.find('z'))

print(df['D'].str.contains('z',case=False))
Mémo Pandas pour le traitement de données - Correspondance de chaînes

Sélectionner les données avec loc et iloc

# retourner la liste entière
# avec une déclaration conditionnelle
print(df.loc[df['D'] == 'z'])

# retourne le premier élément
print(df.loc[0])

# sélectionne une valeur spécifique étiquette de ligne et étiquette de colonne
print(df.loc[0, 'D'])

# sélectionne une valeur spécifique index de ligne et index de colonne
print(df.iloc[0,3])
Mémo Pandas pour le traitement de données - Sélection de données avec loc et iloc

Requête avec regex

De nombreuses fonctions natives de Pandas prennent en charge les regex, à savoir count(), replace(), contains(), extract(), findall(), match(), split() et rsplit().

# recherche des lignes avec une seule lettre dans la colonne D.

df[df['D'].str.contains(r'[a-z]+')] # \D
Mémo Pandas pour le traitement de données - Regex

Il renvoie le DataFrame entier car toutes les variables de la colonne D sont des lettres.

Le plus grand et le plus petit

# retourne les 2 lignes avec les plus grand nombres dans la colonne B

df.nlargest(2, 'B')
Mémo Pandas pour le traitement de données - Plus grand
# retourne les 2 lignes avec le plus petit nombre dans la colonne B

df.nsmallest(2, 'C')
Mémo Pandas pour le traitement de données - Plus petit

Bonus : Traiter de grands volumes de données (Big Data)

Microsoft Excel ne peut traiter que 1000 lignes de données sans problème. Cependant, si le jeu de données dépasse 10k lignes, il se bloque souvent. Pandas de Python gère 1 million de lignes sans aucun problème (du moins, d’après mon expérience, avec un MacBook Pro 16GO de RAM).
Qu’en est-il du big data ? Qu’en est-il des données d’une taille supérieure à 1 Go ? ou de fichiers de données si énormes que vous ne pouvez pas du tout le charger en mémoire ?
Bien sûr, vous pouvez utiliser Dask, ou Vaex, mais nous allons rester avec Pandas ici.

Pour les données volumineuses dans Pandas, nous utiliserons le chunksize pour ne charger qu’une partie du fichier en mémoire à un moment donné.

df = pd.read_csv(’data.csv’, chunksize=10000)

Pandas pour le traitement de données – CODE

Voilà ! Maintenant que nous venons de réviser rapidement les opérations de base de Pandas, j’espère que cet aide-mémoire vous donnera plus d’assurance lorsque vous traiterez des DataFrames Pandas. Vous pouvez voir cette syntaxe en application de quelques analyses de données disponibles sur ce site, par exemple, l’analyse de données sur le Covid-19.

Pour faciliter la révision, j’ai mis tout ce qui est mentionné ci-dessus dans un notebook Google Colab. N’hésitez pas à l’exécuter et à le télécharger : Cheat Sheet Pandas pour le Traitement de Données.

Publications similaires

3 Commentaires
Le plus récent
Le plus ancien Le plus populaire
Commentaires en ligne
Afficher tous les commentaires