Lors de la suppression d'une colonne dans un DataFrame que j'utilise:

del df['column_name']

Et cela fonctionne très bien. Pourquoi ne puis-je pas utiliser les éléments suivants?

del df.column_name

Comme vous pouvez accéder à la colonne / série en tant que df.column_name, je m'attends à ce que cela fonctionne.

1232
John 16 nov. 2012 à 10:26

10 réponses

Meilleure réponse

Comme vous l'avez deviné, la bonne syntaxe est

del df['column_name']

Il est difficile de faire fonctionner del df.column_name simplement en raison de limitations syntaxiques en Python. del df[name] est traduit en df.__delitem__(name) sous les couvertures par Python.

776
cs95 7 avril 2019 à 22:01

Une autre façon de supprimer une colonne dans Pandas DataFrame

Si vous ne recherchez pas la suppression sur place, vous pouvez créer un nouveau DataFrame en spécifiant les colonnes en utilisant la fonction DataFrame(...) comme

my_dict = { 'name' : ['a','b','c','d'], 'age' : [10,20,25,22], 'designation' : ['CEO', 'VP', 'MD', 'CEO']}

df = pd.DataFrame(my_dict)

Créez un nouveau DataFrame en tant que

newdf = pd.DataFrame(df, columns=['name', 'age'])

Vous obtenez un résultat aussi bon que ce que vous obtenez avec del / drop

1
Daksh 9 sept. 2018 à 06:59

Déposer par index

Supprimez les première, deuxième et quatrième colonnes:

df.drop(df.columns[[0,1,3]], axis=1, inplace=True)

Supprimer la première colonne:

df.drop(df.columns[[0]], axis=1, inplace=True)

Il existe un paramètre facultatif inplace pour que l'original les données peuvent être modifiées sans créer de copie.

Sauté

Sélection, ajout, suppression de colonnes

Supprimer la colonne column-name:

df.pop('column-name')

Exemples:

df = DataFrame.from_items([('A', [1, 2, 3]), ('B', [4, 5, 6]), ('C', [7,8, 9])], orient='index', columns=['one', 'two', 'three'])

print df:

   one  two  three
A    1    2      3
B    4    5      6
C    7    8      9

df.drop(df.columns[[0]], axis=1, inplace=True) print df:

   two  three
A    2      3
B    5      6
C    8      9

three = df.pop('three') print df:

   two
A    2
B    5
C    8
104
Peter Mortensen 23 mai 2018 à 19:44

La meilleure façon de le faire dans les pandas est d'utiliser {{ X0}}:

df = df.drop('column_name', 1)

1 est le axe (0 pour les lignes et 1 pour les colonnes.)

Pour supprimer la colonne sans avoir à réaffecter df, vous pouvez faire:

df.drop('column_name', axis=1, inplace=True)

Enfin, pour supprimer par colonne numéro au lieu de par colonne libellé , essayez de supprimer, par exemple les 1ère, 2e et 4e colonnes:

df = df.drop(df.columns[[0, 1, 3]], axis=1)  # df.columns is zero-based pd.Index 

Fonctionne également avec la syntaxe "texte" pour les colonnes:

df.drop(['column_nameA', 'column_nameB'], axis=1, inplace=True)
2022
PV8 20 nov. 2019 à 09:53

Un ajout intéressant est la possibilité de supprimer des colonnes uniquement si elles existent . De cette façon, vous pouvez couvrir plus de cas d'utilisation et il ne supprimera que les colonnes existantes des étiquettes qui lui seront transmises:

Ajoutez simplement errors = 'ignore' , par exemple .:

df.drop(['col_name_1', 'col_name_2', ..., 'col_name_N'], inplace=True, axis=1, errors='ignore')
  • Ceci est nouveau à partir des pandas 0.16.1. La documentation est ici.
55
Peter Mortensen 23 mai 2018 à 19:48

À partir de la version 0.16.1, vous pouvez le faire

df.drop(['column_name'], axis = 1, inplace = True, errors = 'ignore')
41
Emile Bergeron 21 oct. 2016 à 21:20

Il est recommandé de toujours utiliser la notation []. L'une des raisons est que la notation d'attribut (df.column_name) ne fonctionne pas pour les indices numérotés:

In [1]: df = DataFrame([[1, 2, 3], [4, 5, 6]])

In [2]: df[1]
Out[2]:
0    2
1    5
Name: 1

In [3]: df.1
  File "<ipython-input-3-e4803c0d1066>", line 1
    df.1
       ^
SyntaxError: invalid syntax
30
Peter Mortensen 23 mai 2018 à 19:43

Utilisation:

columns = ['Col1', 'Col2', ...]
df.drop(columns, inplace=True, axis=1)

Cela supprimera une ou plusieurs colonnes en place. Notez que inplace=True a été ajouté dans pandas v0.13 et ne fonctionnera pas sur les anciennes versions. Vous devez attribuer le résultat dans ce cas:

df = df.drop(columns, axis=1)
230
Peter Mortensen 23 mai 2018 à 19:44

Dans pandas 0.16.1+, vous ne pouvez supprimer des colonnes que si elles existent selon la solution publiée par @eiTanLaVi. Avant cette version, vous pouvez obtenir le même résultat via une compréhension de liste conditionnelle:

df.drop([col for col in ['col_name_1','col_name_2',...,'col_name_N'] if col in df], 
        axis=1, inplace=True)
20
Alexander 22 nov. 2016 à 15:15