Skip to content

pandas : Suppression des lignes et des colonnes d’un DataFrame avec drop()

Utilisez drop() pour supprimer des lignes et des colonnes de pandas.DataFrame.

Avant la version 0.21.0, spécifiez la ligne/colonne avec les étiquettes de paramètre et l’axe. l’index ou les colonnes peuvent être utilisés à partir de la version 0.21.0.

Cet article décrit le contenu suivant.

  • Supprimer des lignes de pandas.DataFrame
    • Spécifier par nom de ligne (étiquette de ligne)
    • Spécifiez par numéro de ligne
    • Remarques lorsque l’index n’est pas défini
  • Supprimer les colonnes de pandas.DataFrame
    • Spécifier par nom de colonne (étiquette de colonne)
    • Spécifiez par numéro de colonne
  • Supprimer plusieurs lignes et colonnes à la fois

Consultez les articles suivants sur la suppression des valeurs manquantes NaN et des lignes avec des éléments en double.

L’exemple de code utilise les données suivantes.

import pandas as pd

df = pd.read_csv('data/src/sample_pandas_normal.csv', index_col=0)
print(df)
#          age state  point
# name                     
# Alice     24    NY     64
# Bob       42    CA     92
# Charlie   18    CA     70
# Dave      68    TX     70
# Ellen     24    CA     88
# Frank     30    NY     57

Le fichier CSV est ici :

Supprimer des lignes de pandas.DataFrame

Spécifier par nom de ligne (étiquette de ligne)

Spécifier avec le premier paramètre les étiquettes et le second paramètre l’axe. Dans le cas des lignes, définissez axis=0.

print(df.drop('Charlie', axis=0))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57

La valeur par défaut est axis=0, donc l’axe peut être omis.

print(df.drop('Charlie'))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57

A partir de la version 0.21.0, vous pouvez également utiliser le paramètre index.

print(df.drop(index='Charlie'))
#        age state  point
# name                   
# Alice   24    NY     64
# Bob     42    CA     92
# Dave    68    TX     70
# Ellen   24    CA     88
# Frank   30    NY     57

Utilisez une liste pour supprimer plusieurs lignes à la fois.

print(df.drop(['Bob', 'Dave', 'Frank']))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

print(df.drop(index=['Bob', 'Dave', 'Frank']))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

Par défaut, le DataFrame d’origine n’est pas modifié et un nouveau DataFrame est renvoyé.

La définition du paramètre inplace sur True modifie le DataFrame d’origine. Dans ce cas, aucun nouveau DataFrame n’est renvoyé et la valeur de retour est None.

df_org = df.copy()
df_org.drop(index=['Bob', 'Dave', 'Frank'], inplace=True)
print(df_org)
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

Spécifiez par numéro de ligne

Si vous souhaitez spécifier par numéro de ligne, utilisez l’attribut index de DataFrame.

Spécifiez le numéro de ligne dans [] de l’attribut d’index pour obtenir le nom de ligne correspondant. Plusieurs numéros de ligne peuvent être spécifiés à l’aide d’une liste.

print(df.index[[1, 3, 5]])
# Index(['Bob', 'Dave', 'Frank'], dtype="object", name="name")

Vous pouvez le spécifier comme premier paramètre labels ou index de drop().

print(df.drop(df.index[[1, 3, 5]]))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

print(df.drop(index=df.index[[1, 3, 5]]))
#          age state  point
# name                     
# Alice     24    NY     64
# Charlie   18    CA     70
# Ellen     24    CA     88

Remarques lorsque l’index n’est pas défini

Si aucun nom de ligne n’est défini, par défaut, l’index sera une séquence d’entiers. Faites attention si index est un nombre plutôt qu’une chaîne.

df_noindex = pd.read_csv('data/src/sample_pandas_normal.csv')
print(df_noindex)
#       name  age state  point
# 0    Alice   24    NY     64
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 3     Dave   68    TX     70
# 4    Ellen   24    CA     88
# 5    Frank   30    NY     57

print(df_noindex.index)
# RangeIndex(start=0, stop=6, step=1)

Tant qu’il s’agit d’un numéro séquentiel, le résultat est le même, que vous spécifiiez un numéro tel quel ou que vous utilisiez l’attribut index.

print(df_noindex.drop([1, 3, 5]))
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

print(df_noindex.drop(df_noindex.index[[1, 3, 5]]))
#       name  age state  point
# 0    Alice   24    NY     64
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88

Le résultat est différent s’il est hors séquence par tri, etc. Lors de la spécification d’une valeur numérique telle quelle, la ligne dont l’étiquette est la valeur numérique est supprimée, et lors de l’utilisation de l’attribut index, la ligne dont le numéro est la valeur numérique est supprimé.

df_noindex_sort = df_noindex.sort_values('state')
print(df_noindex_sort)
#       name  age state  point
# 1      Bob   42    CA     92
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64
# 5    Frank   30    NY     57
# 3     Dave   68    TX     70

print(df_noindex_sort.index)
# Int64Index([1, 2, 4, 0, 5, 3], dtype="int64")

print(df_noindex_sort.drop([1, 3, 5]))
#       name  age state  point
# 2  Charlie   18    CA     70
# 4    Ellen   24    CA     88
# 0    Alice   24    NY     64

print(df_noindex_sort.drop(df_noindex_sort.index[[1, 3, 5]]))
#     name  age state  point
# 1    Bob   42    CA     92
# 4  Ellen   24    CA     88
# 5  Frank   30    NY     57

Voir l’article suivant pour le tri.

Supprimer les colonnes de pandas.DataFrame

Spécifier par nom de colonne (étiquette de colonne)

Spécifier avec le premier paramètre les étiquettes et le second paramètre l’axe. Dans le cas des lignes, définissez axis=1.

print(df.drop('state', axis=1))
#          age  point
# name               
# Alice     24     64
# Bob       42     92
# Charlie   18     70
# Dave      68     70
# Ellen     24     88
# Frank     30     57

A partir de la version 0.21.0, vous pouvez également utiliser les colonnes de paramètres.

print(df.drop(columns='state'))
#          age  point
# name               
# Alice     24     64
# Bob       42     92
# Charlie   18     70
# Dave      68     70
# Ellen     24     88
# Frank     30     57

Utilisez une liste pour supprimer plusieurs colonnes à la fois.

print(df.drop(['state', 'point'], axis=1))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

print(df.drop(columns=['state', 'point']))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

Le paramètre inplace peut être utilisé aussi bien que pour les lignes.

df_org = df.copy()
df_org.drop(columns=['state', 'point'], inplace=True)
print(df_org)
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

Spécifiez par numéro de colonne

Si vous souhaitez spécifier par numéro de colonne, utilisez l’attribut columns de DataFrame.

print(df.columns[[1, 2]])
# Index(['state', 'point'], dtype="object")

print(df.drop(df.columns[[1, 2]], axis=1))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

print(df.drop(columns=df.columns[[1, 2]]))
#          age
# name        
# Alice     24
# Bob       42
# Charlie   18
# Dave      68
# Ellen     24
# Frank     30

Si la valeur des colonnes est un entier, soyez prudent comme décrit ci-dessus pour les lignes.

Supprimer plusieurs lignes et colonnes à la fois

À partir de la version 0.21.0 et ultérieure, il est possible de supprimer plusieurs lignes et colonnes simultanément en spécifiant le paramètreindex et les colonnes.

Bien sûr, il est également possible de spécifier par numéro de ligne et numéro de colonne ou de spécifier le paramètre en place.

print(df.drop(index=['Bob', 'Dave', 'Frank'],
              columns=['state', 'point']))
#          age
# name        
# Alice     24
# Charlie   18
# Ellen     24

print(df.drop(index=df.index[[1, 3, 5]],
              columns=df.columns[[1, 2]]))
#          age
# name        
# Alice     24
# Charlie   18
# Ellen     24

df_org = df.copy()
df_org.drop(index=['Bob', 'Dave', 'Frank'],
            columns=['state', 'point'], inplace=True)
print(df_org)
#          age
# name        
# Alice     24
# Charlie   18
# Ellen     24