Passer d’un format large à un format long avec melt()
La méthode melt() permet de transformer un DataFrame d’un format large (wide) en un format long (long format). Elle est souvent utilisée pour « déplier » un DataFrame en plusieurs lignes, où chaque observation est associée à une colonne spécifique de manière plus lisible ou mieux adaptée à certaines analyses.
Fonctions :
-
df.melt(id_vars=['col1'], value_vars=['col2', 'col3'])
La méthode melt() permet de transformer un DataFrame depuis un format large (wide) en un format long (tidy). C'est l'opposé de pivot() : on réduit le nombre de colonnes en empilant leurs valeurs, tout en conservant les colonnes identifiantes. ➡️ Très utile pour : Préparer des données pour certains types d'analyses ou visualisations (ex : seaborn attend souvent un format long). Dénormaliser des données avant des transformations supplémentaires.
Importation :
import pandas as pd
Attributs :
Paramètre Description id_vars
Les colonnes identifiantes à conserver (restent inchangées). value_vars
Les colonnes à déplier en une seule colonne (fusionnées en deux nouvelles colonnes : variable
etvalue
).var_name
(optionnel)Nom de la colonne résultante contenant les noms des colonnes originales (par défaut : 'variable'
).value_name
(optionnel)Nom de la colonne résultante contenant les valeurs (par défaut : 'value'
).Exemple de code :
import pandas as pd # Exemple de DataFrame large df = pd.DataFrame({ 'Date': ['2024-01-01', '2024-01-02'], 'Produit_A': [100, 120], 'Produit_B': [150, 130] }) # Transformation en format long long_df = df.melt(id_vars=['Date'], value_vars=['Produit_A', 'Produit_B'], var_name='Produit', value_name='Vente') print(long_df)
Explication du code :
On applique
melt()
:-
id_vars=['Date']
➡️ La colonne Date reste fixe.value_vars=['Produit_A', 'Produit_B']
➡️ Les colonnes Produit_A et Produit_B sont fondues en 2 colonnes :Produit
➡️ Noms des colonnes d'origine (Produit_A
,Produit_B
).Vente
➡️ Valeurs associées.
🔹 Remarques pratiques
-
Melt est indispensable pour restructurer les données avant :
- Des graphes avec
seaborn
,plotly
, etc. - Des groupby ou des aggregations par catégories.
- Des graphes avec
-
Tu peux renommer les colonnes résultantes avec
var_name
etvalue_name
pour plus de clarté. - Si tu ne spécifies pas
value_vars
,melt()
prendra toutes les colonnes saufid_vars
.
-