
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
