Accéder au contenu principal

PySpark : Comment supprimer une colonne d'un DataFrame ?

Dans PySpark, nous pouvons supprimer une ou plusieurs colonnes d'un DataFrame en utilisant la méthode .drop("column_name") pour une seule colonne ou .drop(["column1", "column2", ...]) pour plusieurs colonnes.
Actualisé 14 nov. 2024  · 6 min de lecture
Le nettoyage et la préparation des données sont des étapes essentielles de tout projet de science ou d'ingénierie des données. Pour garantir la qualité et la fiabilité de nos données, nous devons identifier et traiter les incohérences, les erreurs et les valeurs manquantes.

PySpark est particulièrement utile lorsque l'on travaille avec de grands ensembles de données, car il fournit des méthodes efficaces pour nettoyer notre ensemble de données. Dans cet article, nous allons nous concentrer sur une tâche de nettoyage courante : comment supprimer des colonnes d'un DataFrame en utilisant les méthodes de PySpark .drop() et .select().

Pour en savoir plus sur PySpark, consultez le cours Introduction à PySpark.

 

Pourquoi supprimer des colonnes dans les DataFrame de PySpark ?

L'élimination des colonnes est une tâche courante dans le prétraitement des données pour diverses raisons. La suppression des colonnes inutiles ou non pertinentes peut réduire considérablement la quantité de données à traiter. Cela permet de rationaliser notre ensemble de données, ce qui facilite l'analyse et améliore potentiellement les performances de nos travaux PySpark.

En outre, lors de la préparation des données pour les modèles d 'apprentissage automatique, la sélection des caractéristiques implique souvent l'élimination des colonnes qui ne contribuent pas à la précision du modèle ou qui risquent d'introduire du bruit. Cette étape peut conduire à des modèles plus efficaces et plus performants.

Enfin, la suppression de colonnes peut être une stratégie pour améliorer la qualité des données. Si une colonne contient un pourcentage élevé de valeurs manquantes ou de données erronées, il peut être préférable de la supprimer.

Comment supprimer une seule colonne d'un DataFrame PySpark

Supposons que nous ayons un DataFrame df avec cinq colonnes : player_name, player_position, team, minutes_played, et score. La colonne minutes_played comporte de nombreuses valeurs manquantes, nous voulons donc la supprimer.

Dans PySpark, nous pouvons supprimer une seule colonne d'un DataFrame à l'aide de la méthode .drop().

La syntaxe est la suivante : df.drop("column_name") où :

  • df est le DataFrame à partir duquel nous voulons supprimer la colonne
  • column_name est le nom de la colonne à supprimer.

La méthode df.drop() renvoie un nouveau DataFrame dont les colonnes spécifiées ont été supprimées.

C'est ainsi que l'on peut déposer une colonne :

df_dropped = df.drop("minutes_played")

Comment supprimer plusieurs colonnes d'un DataFrame PySpark

Imaginons que nous voulions analyser notre DataFrame df mais que nous ne voulions pas prendre en compte l'équipe ou la position du joueur - nous voulons donc supprimer ces deux colonnes. Il y a plus d'une façon de procéder, alors explorons les options qui s'offrent à nous.

Pour supprimer plusieurs colonnes d'un DataFrame PySpark, nous pouvons passer une liste de noms de colonnes à la méthode .drop(). Nous pouvons le faire de deux manières :

# Option 1: Passing the names as a list
df_dropped = df.drop(["team", "player_position"])

# Option 2: Passing the names as separate arguments
df_dropped = df.drop("team", "player_position")

Il est également possible d'enchaîner plusieurs appels à .drop(). Bien que techniquement fonctionnelle, cette approche n'est généralement pas considérée comme la plus efficace ou la plus élégante. Chaque appel crée un nouveau DataFrame, ce qui peut entraîner une surcharge de travail, en particulier lorsque vous travaillez avec des ensembles de données volumineux.

df_dropped = df.drop("team").drop("player_position")

Suppression de colonnes sous conditions

Au lieu de spécifier les colonnes à supprimer, nous pouvons inverser la méthode et ne sélectionner que celles qui répondent à une condition ou à une exigence. De cette manière, le DataFrame retourné ne contiendra plus les colonnes indésirables. 

L'utilisation .select()

Nous pouvons utiliser la méthode .select() de PySpark avec une compréhension de liste pour supprimer une ou plusieurs colonnes en fonction de certains critères. La méthode est flexible et nous pouvons l'utiliser à partir d'une condition simple jusqu'à une condition complexe. 

Cette méthode suit la syntaxe df.select([col for col in df.columns if condition]), où :

  • df est le DataFrame avec lequel vous travaillez.
  • condition est le critère utilisé pour filtrer les colonnes que vous souhaitez conserver.

Travaillons à nouveau avec notre DataFrame df et sélectionnons toutes les colonnes à l'exception de la colonne team:

df_sel = df.select([col for col in df.columns if col != "team"])

Conditions complexes avec .selectExpr()

Si vous êtes à l'aise avec SQL et que vous avez besoin d'appliquer des conditions plus complexes lors du filtrage des colonnes, la méthode .selectExpr() de PySpark offre une solution puissante. Il nous permet d'utiliser des expressions de type SQL pour sélectionner et manipuler des colonnes directement dans notre code PySpark.

Prenons l'exemple suivant :

# Select specific columns and create a new 'FullMatch' column
df_sel = df.selectExpr("player_name", "player_position", "minutes_played >= 60 as FullMatch")

Ici, nous n'excluons pas seulement une colonne. Nous sommes :

  1. Sélection des colonnes player_name et player_position.
  2. Création d'une nouvelle colonne appelée FullMatch qui indique si un joueur a joué un match complet (60 minutes ou plus).

Cette flexibilité rend .selectExpr() inestimable pour les scénarios dans lesquels de simples compréhensions de listes ne suffisent pas.

Meilleures pratiques

Lorsque vous décidez de supprimer des colonnes de votre DataFrame, il est essentiel de suivre certaines bonnes pratiques pour maintenir l'intégrité des données, la lisibilité du code et l'efficacité.

1. Sauvegardez vos données: Avant d'apporter des modifications à votre DataFrame, en particulier lorsque vous supprimez des colonnes, il est judicieux de créer une copie de sauvegarde. Vous pouvez ainsi revenir aux données d'origine si nécessaire.

df_backup = df.persist()  # Cache the DataFrame to avoid recomputing it later

2. Abandonner avec inplace=False (par défaut): Par défaut, la méthode .drop() renvoie un nouveau DataFrame sans modifier l'original. Cette solution est généralement plus sûre. Si vous êtes absolument sûr de vouloir modifier le DataFrame d'origine, vous pouvez utiliser inplace=True, mais soyez prudent.

df_dropped = df.drop("column_to_drop", inplace=False) # Default behavior

3. Documentez vos décisions: Si vous travaillez sur un projet collaboratif ou si vous prévoyez de revoir votre code à l'avenir, il est utile d'ajouter des commentaires expliquant pourquoi vous avez choisi de supprimer certaines colonnes. Cette documentation peut fournir un contexte précieux pour vous-même et pour les autres.

4. Envisagez de renommer les colonnes: Au lieu de supprimer des colonnes, nous devrions nous demander s'il ne serait pas plus approprié de les renommer, en particulier si les informations qu'elles contiennent peuvent être utiles pour une analyse future. PySpark nous fournit la méthode .withColumnRenamed() qui nous aide à renommer les colonnes.

Conclusion

Dans ce tutoriel, nous avons appris à déposer une ou plusieurs colonnes à l'aide des méthodes .drop() et .select(). Nous avons également décrit d'autres méthodes permettant d'exploiter les expressions SQL si nous avons besoin de techniques de sélection plus complexes.

Si vous souhaitez développer vos compétences et tirer parti des techniques puissantes de PySpark, jetez un coup d'œil à ces cours et documents : 

FAQ

Comment supprimer des colonnes basées sur des expressions rationnelles dans PySpark ?

Pour supprimer des colonnes basées sur un motif regex dans PySpark, vous pouvez filtrer les noms de colonnes en utilisant une compréhension de liste et le module re (pour les expressions régulières), puis passer la liste filtrée à la méthode .drop().

Comment supprimer des colonnes ayant le même nom dans PySpark ?

PySpark ne permet pas de dupliquer les noms de colonnes dans un DataFrame. Si votre source de données comporte des noms en double, vous rencontrerez probablement une erreur lors de la création du DataFrame. La meilleure pratique consiste à résoudre les noms en double à la source ou lors de la création du DataFrame.

Comment supprimer les colonnes qui ne contiennent que des valeurs nulles dans PySpark ?

Pour supprimer les colonnes ne contenant que des valeurs nulles dans PySpark, nous pouvons d'abord calculer le nombre de valeurs nulles dans chaque colonne à l'aide de count(when(col(c).isNull(), c)). Ensuite, nous identifions les colonnes dont le nombre de nullités est égal au nombre total de lignes du DataFrame. Enfin, nous supprimons ces colonnes à l'aide de la méthode .drop().

Comment déposer des colonnes de manière conditionnelle dans PySpark ?

Utilisez df.select([col for col in df.columns if condition]).


Photo of Maria Eugenia Inzaugarat
Author
Maria Eugenia Inzaugarat
Sujets

Apprenez PySpark avec ces cours !

Certification disponible

cours

Ingénierie des fonctionnalités avec PySpark

4 hr
14.7K
Apprenez les détails concrets auxquels les data scientists consacrent 70 à 80 % de leur temps : le traitement des données et l'ingénierie des fonctionnalités.
Afficher les détailsRight Arrow
Commencer Le Cours
Voir plusRight Arrow