
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
