Python
Réorganiser facilement les colonnes de Pandas : Guide pour débutants

Réorganiser facilement les colonnes de Pandas : Guide pour débutants

MoeNagy Dev

Importance de la réorganisation des colonnes dans Pandas

Réorganiser les colonnes dans les DataFrames de Pandas est une compétence essentielle pour les analystes de données et les chercheurs. Cela peut améliorer l'analyse et la visualisation des données, améliorer la lisibilité et l'organisation des ensembles de données, et aligner les données pour des cas d'utilisation spécifiques.

En réorganisant l'ordre des colonnes, vous pouvez :

  • Améliorer l'analyse et la visualisation des données en regroupant des colonnes liées, facilitant ainsi la compréhension et l'interprétation des données.
  • Améliorer la lisibilité et l'organisation de vos ensembles de données, ce qui facilite la navigation et la compréhension de la structure des données.
  • Aligner les données pour des cas d'utilisation spécifiques, tels que la préparation des données pour des modèles d'apprentissage automatique ou la création de rapports personnalisés.

Comprendre l'ordre des colonnes dans les DataFrames de Pandas

Dans Pandas, l'ordre des colonnes dans un DataFrame est déterminé par l'ordre dans lequel les colonnes sont créées ou ajoutées au DataFrame. Lorsque vous créez un nouveau DataFrame, les colonnes sont généralement commandées dans le même ordre que celui dans lequel elles ont été fournies lors du processus de création.

Vous pouvez accéder à l'ordre des colonnes d'un DataFrame en utilisant l'attribut columns :

import pandas as pd
 
# Créer un DataFrame d'exemple
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]})
 
# Afficher l'ordre des colonnes
print(df.columns)
# Sortie : Index(['A', 'B', 'C'], dtype='object')

Réorganiser les colonnes en utilisant des méthodes intégrées

Pandas fournit plusieurs méthodes intégrées pour réorganiser les colonnes dans un DataFrame.

df.reindex(columns=nouvel_ordre)

La méthode reindex() vous permet de réorganiser les colonnes en spécifiant un nouvel ordre dans le paramètre columns. Cette méthode préserve les types de données d'origine des colonnes.

# Réorganiser les colonnes
nouvel_ordre = ['C', 'A', 'B']
df_reordonné = df.reindex(columns=nouvel_ordre)
print(df_reordonné)
# Sortie :
#    C  A  B
# 0  7  1  4
# 1  8  2  5
# 2  9  3  6

Si vous spécifiez une colonne qui n'existe pas dans le DataFrame d'origine, reindex() ajoutera une nouvelle colonne avec des valeurs NaN.

df[nouvel_ordre]

Vous pouvez également réorganiser les colonnes en les sélectionnant dans l'ordre souhaité en utilisant les noms de colonnes entre crochets.

# Réorganiser les colonnes
nouvel_ordre = ['C', 'A', 'B']
df_reordonné = df[nouvel_ordre]
print(df_reordonné)
# Sortie :
#    C  A  B
# 0  7  1  4
# 1  8  2  5
# 2  9  3  6

Cette méthode est plus concise que l'utilisation de reindex(), mais elle ne gère pas les colonnes manquantes dans le nouvel ordre.

Techniques avancées de réorganisation

Réorganisation basée sur les noms de colonnes

Vous pouvez réorganiser les colonnes en fonction de leurs noms, soit dans l'ordre alphabétique, soit dans un ordre spécifique défini par une liste.

# Réorganiser les colonnes par ordre alphabétique
df_alphabétique = df[sorted(df.columns)]
print(df_alphabétique)
# Sortie :
#    A  B  C
# 0  1  4  7
# 1  2  5  8
# 2  3  6  9
 
# Réorganiser les colonnes dans un ordre spécifique
ordre_spécifique = ['B', 'C', 'A']
df_ordre_spécifique = df[ordre_spécifique]
print(df_ordre_spécifique)
# Sortie :
#    B  C  A
# 0  4  7  1
# 1  5  8  2
# 2  6  9  3

Réorganisation basée sur les types de données des colonnes

Vous pouvez regrouper les colonnes en fonction de leurs types de données et réorganiser l'ordre des types de données.

# Réorganiser les colonnes par type de données
df_par_type = df.reindex(sorted(df.columns, key=lambda x: (df[x].dtype, x)), axis=1)
print(df_par_type)
# Sortie :
#    A  B  C
# 0  1  4  7
# 1  2  5  8
# 2  3  6  9

Dans cet exemple, les colonnes sont d'abord triées selon leurs types de données, puis selon leurs noms (comme critère de tri secondaire).

Réorganisation basée sur les statistiques des colonnes

Vous pouvez réorganiser les colonnes en fonction de statistiques spécifiques, telles que les valeurs minimales, maximales ou moyennes des colonnes.

# Réorganiser les colonnes par valeur minimale
df_par_min = df.reindex(df.min().sort_values().index, axis=1)
print(df_par_min)
# Sortie :
#    A  B  C
# 0  1  4  7
# 1  2  5  8
# 2  3  6  9

Dans cet exemple, les colonnes sont réorganisées en fonction de la valeur minimale de chaque colonne, telle que déterminée par df.min().sort_values().index.

Réorganisation conditionnelle des colonnes

Vous pouvez réorganiser les colonnes en fonction de conditions spécifiques, telles que la sélection des colonnes correspondant à un motif ou l'exclusion des colonnes qui répondent à certains critères.

# Réorganiser les colonnes contenant la lettre 'A'
df_avec_A = df[df.columns[df.columns.str.contains('A')]]
print(df_avec_A)
# Sortie :
#    A
# 0  1
# 1  2
# 2  3
 
# Réorganiser les colonnes en excluant celles qui contiennent la lettre 'A'
df_sans_A = df[df.columns[~df.columns.str.contains('A')]]
print(df_sans_A)
# Sortie :
#    B  C
# 0  4  7
# 1  5  8
# 2  6  9

Vous pouvez combiner la réorganisation conditionnelle avec les méthodes de réorganisation intégrées, telles que reindex() ou la sélection de colonnes avec des crochets.

Préservation de l'ordre original des colonnes

Si vous devez réinitialiser l'ordre des colonnes à l'état initial, vous pouvez utiliser la méthode reindex() avec l'ordre original des colonnes.

# Rétablir l'ordre des colonnes à l'état original
df_ordre_original = df.reindex(df.columns, axis=1)
print(df_ordre_original)
# Sortie :
#    A  B  C
# 0  1  4  7
# 1  2  5  8
# 2  3  6  9

Cela garantit que l'ordre des colonnes est restauré à l'état initial, même si l'ordre a été modifié lors du flux de traitement des données.

Réorganisation des colonnes dans des colonnes multi-niveaux

Pandas prend également en charge des structures de colonnes multi-niveaux, où chaque colonne a un en-tête hiérarchique. Vous pouvez appliquer les techniques de réorganisation discutées précédemment aux niveaux individuels de la structure de colonnes multi-niveaux.

# Créer un DataFrame avec des colonnes multi-niveaux
df_multi_niveau = pd.DataFrame({
    ('niveau1', 'A'): [1, 2, 3],
    ('niveau1', 'B'): [4, 5, 6],
    ('niveau2', 'C'): [7, 8, 9]
})
 
# Réorganiser les colonnes par le premier niveau
df_reordonné_multi_niveau = df_multi_niveau[sorted(df_multi_niveau.columns.get_level_values(0))]
print(df_reordonné_multi_niveau)
#    (level1, A)  (level1, B)  (level2, C)
# 0           1           4            7
# 1           2           5            8
# 2           3           6            9

Dans cet exemple, les colonnes sont réorganisées en fonction du premier niveau de la structure de colonnes multi-niveaux.

Déclarations conditionnelles

Les déclarations conditionnelles en Python vous permettent d'exécuter différents blocs de code en fonction de certaines conditions. Les déclarations conditionnelles les plus courantes sont if, elif et else.

age = 25
if age >= 18:
    print("Vous êtes majeur(e).")
else:
    print("Vous êtes mineur(e).")

Dans cet exemple, si la variable age est supérieure ou égale à 18, le bloc de code sous l'instruction if sera exécuté. Sinon, le bloc de code sous l'instruction else sera exécuté.

Vous pouvez également utiliser l'instruction elif pour vérifier plusieurs conditions:

score = 85
if score >= 90:
    print("Vous avez obtenu un A.")
elif score >= 80:
    print("Vous avez obtenu un B.")
elif score >= 70:
    print("Vous avez obtenu un C.")
else:
    print("Vous avez échoué.")

Boucles

Les boucles en Python vous permettent d'exécuter de manière répétée un bloc de code. Les deux types de boucles les plus courants sont for et while.

Boucles for

Les boucles for sont utilisées pour itérer sur une séquence (comme une liste, un tuple ou une chaîne de caractères).

fruits = ["pomme", "banane", "cerise"]
for fruit in fruits:
    print(fruit)

Cela affichera:

pomme
banane
cerise

Vous pouvez également utiliser la fonction range() pour créer une séquence de nombres sur lesquels itérer:

for i in range(5):
    print(i)

Cela affichera:

0
1
2
3
4

Boucles while

Les boucles while sont utilisées pour exécuter un bloc de code tant qu'une certaine condition est vraie.

count = 0
while count < 5:
    print(count)
    count += 1

Cela affichera:

0
1
2
3
4

Fonctions

Les fonctions en Python sont des blocs de code réutilisables qui effectuent une tâche spécifique. Elles peuvent prendre des arguments et renvoyer des valeurs.

def saluer(nom):
    print(f"Bonjour, {nom}!")
 
saluer("Alice")
saluer("Bob")

Cela affichera:

Bonjour, Alice!
Bonjour, Bob!

Vous pouvez également définir des fonctions avec des arguments par défaut et des arguments de longueur variable:

def calculer_surface(longueur, largeur, hauteur=None):
    if hauteur:
        return longueur * largeur * hauteur
    else:
        return longueur * largeur
 
print(calculer_surface(5, 3))       # Sortie : 15
print(calculer_surface(4, 2, 6))    # Sortie : 48

Modules et Packages

La bibliothèque standard de Python propose une large gamme de modules intégrés, et vous pouvez également créer vos propres modules et packages.

import math
print(math.pi)    # Sortie : 3.141592653589793

Vous pouvez également importer des fonctions ou des attributs spécifiques à partir d'un module:

from math import sqrt
print(sqrt(16))   # Sortie : 4.0

Les packages sont des collections de modules, et ils permettent d'organiser votre code dans une structure hiérarchique.

mon_package/
    __init__.py
    module1.py
    module2.py
    sous-package/
        __init__.py
        module3.py

Gestion des exceptions

Les mécanismes de gestion des exceptions en Python vous permettent de gérer les erreurs et les situations inattendues dans votre code.

try:
    result = 10 / 0
except ZeroDivisionError:
    print("Erreur : Division par zéro.")

Vous pouvez également utiliser des blocs except pour gérer plusieurs types d'exceptions et inclure un bloc else et finally facultatif.

try:
    num = int(input("Entrez un nombre : "))
    print(10 / num)
except ValueError:
    print("Erreur : Entrée non valide. Veuillez entrer un nombre.")
except ZeroDivisionError:
    print("Erreur : Division par zéro.")
else:
    print("L'opération a réussi.")
finally:
    print("Ce bloc sera toujours exécuté.")

Entrée/Sortie de fichiers

Python fournit des fonctions intégrées pour lire à partir de fichiers et écrire dans des fichiers.

# Écriture dans un fichier
with open("exemple.txt", "w") as fichier:
    fichier.write("Bonjour, monde !")
 
# Lecture à partir d'un fichier
with open("exemple.txt", "r") as fichier:
    contenu = fichier.read()
    print(contenu)  # Sortie : Bonjour, monde !

L'instruction with garantit que le fichier est correctement fermé après les opérations.

Programmation orientée objet (POO)

Python prend en charge la programmation orientée objet, ce qui vous permet de créer des classes et des objets personnalisés.

class Voiture:
    def __init__(self, marque, modèle, année):
        self.marque = marque
        self.modèle = modèle
        self.année = année
 
    def démarrer(self):
        print(f"La {self.année} {self.marque} {self.modèle} démarre.")
 
ma_voiture = Voiture("Toyota", "Camry", 2020)
ma_voiture.démarrer()  # Sortie : La 2020 Toyota Camry démarre.

Dans cet exemple, nous définissons une classe Voiture avec une méthode __init__ pour initialiser les attributs de l'objet, et une méthode démarrer pour effectuer une action.

Conclusion

Dans ce tutoriel, nous avons abordé un large éventail de concepts Python, notamment les déclarations conditionnelles, les boucles, les fonctions, les modules et packages, la gestion des exceptions, l'IO de fichiers et la programmation orientée objet. Ces sujets sont essentiels pour créer des applications Python robustes et efficaces. N'oubliez pas de vous entraîner et d'expérimenter avec les exemples de code fournis pour solidifier votre compréhension de ces concepts. Bonne programmation!

MoeNagy Dev