La véritable question posée, à laquelle la plupart des réponses ne répondent pas, est la suivante :
Pourquoi je ne peux pas utiliser del df.column_name
?
Nous devons d'abord comprendre le problème, ce qui nous oblige à nous plonger dans Méthodes magiques Python .
Comme Wes souligne dans sa réponse, del df['column']
correspond à la méthode Python méthode magique df.__delitem__('column')
qui est implémenté dans Pandas pour supprimer la colonne .
Cependant, comme indiqué dans le lien ci-dessus sur Méthodes magiques Python :
En fait, __del__
ne devrait presque jamais être utilisé en raison des circonstances précaires dans lesquelles il est appelé ; utilisez-le avec prudence !
On pourrait dire que del df['column_name']
ne doivent pas être utilisées ou encouragées, et donc del df.column_name
ne devrait même pas être envisagée.
Cependant, en théorie, del df.column_name
pourrait être implémenté pour fonctionner dans Pandas en utilisant le site méthode magique __delattr__
. Cela pose cependant certains problèmes, problèmes que l'Union européenne doit résoudre. del df['column_name']
La mise en œuvre l'a déjà fait, mais à un degré moindre.
Exemple de problème
Que se passe-t-il si je définis une colonne dans un cadre de données appelée "dtypes" ou "columns" ?
Supposons ensuite que je veuille supprimer ces colonnes.
del df.dtypes
rendrait le __delattr__
La méthode ne sait pas si elle doit supprimer l'attribut "dtypes" ou la colonne "dtypes".
Questions architecturales derrière ce problème
- Un cadre de données est-il une collection de colonnes ?
- Un cadre de données est-il une collection de rangées ?
- Une colonne est-elle un attribut d'un cadre de données ?
Les pandas répondent :
- Oui, de toutes les manières
- Non, mais si vous voulez qu'il le soit, vous pouvez utiliser la fonction
.ix
, .loc
ou .iloc
méthodes.
- Peut-être, voulez-vous lire données ? Alors oui , sauf si le nom de l'attribut est déjà pris par un autre attribut appartenant au dataframe. Voulez-vous modifier données ? Alors pas de .
TLDR ;
Vous ne pouvez pas faire del df.column_name
En effet, l'architecture de Pandas s'est développée de manière assez sauvage et doit être repensée pour que ce type d'opération soit possible. dissonance cognitive de ne pas se produire chez ses utilisateurs.
Un conseil de pro :
N'utilisez pas df.column_name. C'est peut-être joli, mais cela provoque dissonance cognitive .
Des citations zen de Python qui s'intègrent ici :
Il existe plusieurs façons de supprimer une colonne.
Il devrait y avoir une - et de préférence une seule - manière évidente de le faire.
Les colonnes sont parfois des attributs, mais pas toujours.
Les cas particuliers ne sont pas assez particuliers pour enfreindre les règles.
Fait del df.dtypes
supprimer l'attribut dtypes ou la colonne dtypes ?
Face à l'ambiguïté, refusez la tentation de deviner.
3 votes
Notez que cette question est discutée sur Méta .