Convertir plusieurs colonnes en une seule avec melt()

La méthode melt() permet de convertir plusieurs colonnes d’un DataFrame en une seule colonne, tout en préservant les autres colonnes sous forme de variables supplémentaires. Cela transforme le DataFrame de format large en un format long, où les différentes valeurs de colonnes sont regroupées sous une seule colonne avec une variable identifiant la colonne d’origine. Cette opération est souvent utilisée pour faciliter l’analyse et la visualisation des données lorsque les informations sont réparties sur plusieurs colonnes.

Fonctions :

  • df.melt(id_vars=['id'], var_name='variable', value_name='valeur')

    La méthode melt() en pandas transforme un DataFrame du format large (wide) en format long (long). Elle rassemble plusieurs colonnes en une seule colonne de variables, ce qui est très utile pour normaliser les données et les rendre compatibles avec des fonctions d'analyse ou de visualisation comme sns.lineplot() ou plt.plot(). ✅ C'est l'opposé de pivot() ou pivot_table().

    Importation :

    import pandas as pd

    Attributs :

    Paramètre Description
    id_vars Liste des colonnes à conserver telles quelles (ex. identifiants, catégories).
    value_vars Liste des colonnes à convertir en deux colonnes (variable + valeur). Par défaut : toutes les colonnes autres que id_vars.
    var_name Nom de la nouvelle colonne contenant le nom des anciennes colonnes (par défaut 'variable').
    value_name Nom de la colonne contenant les valeurs correspondantes (par défaut 'value').
    col_level Pour DataFrame avec colonnes multi-niveaux, sélectionne le niveau de colonnes à transformer.
    ignore_index Si True, ignore l'index existant et génère un nouvel index (pandas 1.1.0+).

    Exemple de code :

    import pandas as pd
    
    # Exemple de DataFrame
    df = pd.DataFrame({
        'id': [1, 2, 3],
        'janvier': [100, 200, 300],
        'février': [110, 210, 310],
        'mars': [120, 220, 320]
    })
    
    print("DataFrame d'origine:\n", df)
    
    # Conversion du format large en format long
    df_melt = df.melt(
        id_vars=['id'],
        var_name='mois',
        value_name='ventes'
    )
    
    print("\nDataFrame après melt():\n", df_melt)

    Explication du code :

     
    
    • La colonne id est conservée.
    • Les colonnes janvier, février et mars sont fondues dans deux colonnes :
      mois (les anciens noms de colonnes) et ventes (les valeurs correspondantes).

    Remarques pratiques

    • Très pratique pour préparer les données avant des visualisation
    • Souvent utilisé après l'import d'un tableau croisé Excel, où chaque colonne représente une catégorie ou un mois.