Cours
Dans l’univers de la manipulation de données avec pandas, la méthode .explode() est un outil précieux dès que l’on travaille avec des listes au sein de DataFrames. Ce tutoriel est votre guide pour maîtriser .explode() : principes de base, cas d’usage avancés et erreurs courantes à éviter.
La réponse courte : voici comment .explode() fonctionne
Si vous cherchez une explication rapide, lisez cette section. La méthode .explode() déplie les éléments d’une colonne de type liste sur plusieurs lignes, en faisant de chaque élément une ligne distincte. Par exemple, nous allons utiliser le DataFrame df suivant pour illustrer le processus :
|
ID |
Interests |
|
1 |
['Python', 'Data Science'] |
|
2 |
['Machine Learning', 'AI'] |
La méthode .explode() va étendre les éléments de la colonne Interests comme suit :
# Explode the Interests column
exploded_df = df.explode('Interests')
|
ID |
Interests |
|
1 |
Python |
|
1 |
Data Science |
|
2 |
Machine Learning |
|
2 |
AI |
Qu’est-ce que la méthode pandas .explode() ?
La méthode .explode() simplifie la gestion des données imbriquées, telles que les listes ou les tuples, dans les DataFrames pandas. En convertissant chaque élément d’une structure de type liste en une ligne distincte, .explode() facilite l’accès aux données et les rend prêtes pour l’analyse.
Comment la méthode .explode() fonctionne-t-elle ?
La fonctionnalité de .explode() est à la fois puissante et simple d’utilisation, avec un accent sur la facilité et l’efficacité pour les tâches de manipulation de données.
Column: indique la colonne contenant des entrées de type liste à « exploser ».ignore_index: lorsqu’il est défini surTrue, l’index est réinitialisé en un index entier par défaut, ce qui aide à préserver l’intégrité du DataFrame après l’explosion. La valeur par défaut estFalse.
Deux manières d’utiliser la méthode pandas .explode()
Exploser une seule colonne avec pandas
Le cas d’usage le plus courant consiste à exploser une seule colonne, en étendant chacune de ses entrées de type liste en lignes individuelles. Nous l’avons montré dans la réponse courte. Revenons-y : voici le DataFrame df, qui contient des identifiants et leurs centres d’intérêt d’apprentissage. Comme vous le voyez, ces centres d’intérêt sont stockés sous forme de listes.
|
ID |
Interests |
|
1 |
['Python', 'Data Science'] |
|
2 |
['Machine Learning', 'AI'] |
La méthode .explode() va développer les éléments de la colonne Interests en lignes individuelles comme suit :
# Explode the Interests column
exploded_df = df.explode('Interests')
|
ID |
Interests |
|
1 |
Python |
|
1 |
Data Science |
|
2 |
Machine Learning |
|
2 |
AI |
Cette approche est particulièrement utile pour des colonnes contenant des données catégorielles ou plusieurs attributs par observation.
Exploser plusieurs colonnes avec pandas
Vous pouvez aussi rencontrer des cas où vous devez exploser plusieurs colonnes dans un DataFrame. C’est utile lorsque plusieurs colonnes contiennent des structures de type liste à déplier simultanément. Ajoutons une colonne Tools à df pour l’illustrer :
|
ID |
Interests |
Tools |
|
1 |
['Python', 'Data Science'] |
['Pandas', 'NumPy'] |
|
2 |
['Machine Learning', 'AI'] |
['Scikit-learn', 'TensorFlow'] |
Pour exploser plusieurs colonnes, indiquez simplement la liste des colonnes à traiter :
# Explode the Interests & Tools columns
exploded_df = df.explode(['Interests', 'Tools'])
|
ID |
Interests |
Tools |
|
1 |
Python |
Pandas |
|
1 |
Data Science |
NumPy |
|
2 |
Machine Learning |
Scikit-learn |
|
2 |
AI |
TensorFlow |
Cette technique est très utile lorsque vous travaillez avec plusieurs colonnes contenant des listes. Cela dit, l’utilisation de .explode() comporte quelques pièges, que nous abordons ci-dessous.
Erreurs courantes avec pandas .explode() et solutions
Colonnes dupliquées explosées
Un écueil fréquent avec .explode() consiste à exploser par erreur des colonnes dupliquées. Rappel : assurez-vous toujours que la liste des colonnes passées est composée d’éléments uniques !
# Incorrect : colonnes dupliquées
df.explode(['Interests','Tools','Interests'])
# Correct : colonnes uniques
df.explode(['Interests','Tools'])
Exploser des chaînes qui ressemblent à des listes
Il arrive souvent que certaines lignes d’un DataFrame soient des chaînes de caractères qui ressemblent à des listes. Tenter d’exploser une colonne contenant des chaînes au format "['Python', 'AI']" ne change rien, car la méthode .explode() attend de vraies structures de type liste, pas des chaînes qui y ressemblent. Voici un exemple et sa solution ! Imaginons que df contienne les valeurs suivantes :
|
ID |
Interests |
|
1 |
"['Python', 'Data Science']" |
|
2 |
"['Machine Learning', 'AI']" |
Comme vous le voyez, la colonne Interests contient des valeurs de type chaîne qui ressemblent à des listes. Utiliser .explode() sur Interests ne produira aucun effet puisque chaque valeur est une chaîne unique. Pour corriger cela, convertissez d’abord les valeurs de Interests en listes.
import ast
df['Interests'] = df['Interests'].apply(ast.literal_eval)
exploded_df = df.explode('Interests')
print(exploded_df) # This will work
Longueurs non concordantes sur plusieurs colonnes
Avec les DataFrames pandas, un autre piège courant est la présence de lignes où les structures de type liste, dans les colonnes à exploser, n’ont pas la même longueur. Cette discordance peut entraîner des données mal alignées ou incomplètes après l’utilisation de .explode() sur plusieurs colonnes. Par exemple, imaginons que df soit le suivant :
|
ID |
Interests |
Tools |
|
1 |
['Python', 'Data Science'] |
['Pandas'] |
|
2 |
['Machine Learning'] |
['Scikit-learn', 'TensorFlow'] |
Comme vous le voyez, les colonnes Interests et Tools contiennent des listes de longueurs différentes. Utiliser .explode() tel quel sur ces colonnes produirait une erreur, car les listes doivent avoir le même nombre de valeurs. Pour corriger cela, vous pouvez compléter les listes avec None à l’aide d’une fonction dédiée :
# Function to pad lists to the same length
def pad_lists(row):
max_len = max(len(row['Interests']), len(row['Tools']))
row['Interests'] += [None] * (max_len - len(row['Interests']))
row['Tools'] += [None] * (max_len - len(row['Tools']))
return row
# Apply the padding function to each row
df = df.apply(pad_lists, axis=1)
# Now, safely explode both columns
df.explode(['Interests','Tools'])
|
ID |
Interests |
Tools |
|
1 |
Python |
Pandas |
|
1 |
Data Science |
None |
|
2 |
Machine Learning |
Scikit-learn |
|
2 |
None |
TensorFlow |
Pour conclure
En résumé, .explode() est une méthode très utile pour déplier les éléments d’une liste en lignes dans un DataFrame pandas. Pour aller plus loin avec pandas, explorez ces ressources :
Adel est un éducateur, conférencier et évangéliste en science des données à DataCamp où il a publié plusieurs cours et formations en direct sur l'analyse des données, l'apprentissage automatique et l'ingénierie des données. Il est passionné par la diffusion des compétences en matière de données dans les organisations et par l'intersection de la technologie et de la société. Il est titulaire d'une maîtrise en science des données et en analyse commerciale. Pendant son temps libre, vous pouvez le trouver en train de traîner avec son chat Louis.
