HOWTO · Pandas

Colonne d'exclusion des Pandas

Ce tutoriel explique comment obtenir toutes les colonnes d'un DataFrame, sauf une colonne particulière.

Sur cette page

Pour exclure des colonnes d’un Pandas DataFrame, utilisez drop() pour supprimer directement des étiquettes, loc pour appliquer une condition aux noms de colonnes, ou Index.difference() si son comportement de tri convient au résultat. Les exemples utilisent un même tableau d’actions ; chaque extrait de code crée ses propres données et peut donc être exécuté séparément.

Sélectionner toutes les colonnes sauf une avec loc

Utilisez loc avec une tranche complète pour les lignes et une condition booléenne sur les étiquettes des colonnes. La tranche : conserve toutes les lignes ; stocks_df.columns != "Sector" est vraie pour chaque colonne dont l’étiquette n’est pas Sector, de sorte que seules ces colonnes sont conservées. loc est un accesseur qui permet de sélectionner des lignes et des colonnes, et non une méthode à appeler avec des parenthèses. Consultez la propriété loc pour connaître sa syntaxe de sélection.

Exécutez cet exemple. Le code et les libellés affichés restent en anglais.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

filtered_df = stocks_df.loc[:, stocks_df.columns != "Sector"]
print(filtered_df)

Le tableau obtenu contient les colonnes Stock et Price(in $) ; ces libellés restent en anglais. Cette approche est utile lorsque l’exclusion s’exprime naturellement sous la forme d’une règle appliquée aux étiquettes. En modifiant la comparaison, vous pouvez conserver ou supprimer une autre colonne nommée.

Exclure une ou plusieurs colonnes avec drop()

Pour supprimer directement des colonnes par leur étiquette, drop() accepte l’argument columns. Indiquez une chaîne pour une colonne et une liste de chaînes pour en supprimer plusieurs. Cette syntaxe précise que les étiquettes désignent des colonnes ; l’équivalent avec l’axe est drop(labels, axis=1). Par défaut, drop() renvoie un nouveau DataFrame et laisse stocks_df inchangé. Affectez le résultat à une variable si vous souhaitez le réutiliser. Le code et les libellés affichés restent en anglais.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

without_sector = stocks_df.drop(columns="Sector")
without_sector_and_price = stocks_df.drop(columns=["Sector", "Price(in $)"])
print(without_sector)
print(without_sector_and_price)

Le premier résultat conserve Stock et Price(in $) ; le second ne conserve que Stock. Ces libellés restent en anglais. Les deux opérations partent du tableau d’origine, car aucun des appels ne le modifie par défaut. Utilisez la forme avec une liste lorsque vous souhaitez supprimer plusieurs étiquettes en une seule opération.

Exclure des colonnes avec Index.difference()

Index.difference() soustrait les étiquettes à exclure de l’Index des étiquettes de colonnes. Utilisez l’Index obtenu pour sélectionner les colonnes. Par défaut, difference() trie les étiquettes renvoyées : l’ordre des colonnes du tableau peut donc différer de celui de la source, même si les données des colonnes conservées ne changent pas. Le code et les libellés affichés restent en anglais.

import pandas as pd

stocks_df = pd.DataFrame(
    {
        "Stock": ["Amazon", "Tesla", "Facebook", "Boeing"],
        "Price(in $)": [3180, 835, 267, 209],
        "Sector": ["Technology", "Technology", "Technology", "Aircraft"],
    }
)

remaining_columns = stocks_df.columns.difference(["Sector"])
filtered_df = stocks_df[remaining_columns]
print(filtered_df)

Ici, les étiquettes restantes sont classées par ordre alphabétique : Price(in $) apparaît donc avant Stock, contrairement à leur ordre dans le DataFrame d’origine. Ces libellés restent en anglais. Si vous devez conserver l’ordre de la source, préférez drop() ou la condition avec loc présentée plus haut, plutôt que de vous fier au tri par défaut de la différence.

Choisir une méthode pour exclure des colonnes

Choisissez drop() lorsque vous connaissez les étiquettes à supprimer et souhaitez exprimer l’opération directement ; son argument columns convient aussi bien à une seule étiquette qu’à une liste. Choisissez loc lorsque la règle de conservation ou de suppression porte sur les noms des colonnes, car son masque booléen rend cette logique de sélection explicite. Choisissez Index.difference() lorsque la soustraction de type ensemble est utile et que l’ordre par défaut des étiquettes vous convient.

Les trois approches sélectionnent des colonnes du même DataFrame, mais selon des règles différentes : des étiquettes explicites avec drop(), une condition booléenne avec loc et une soustraction d’Index avec Index.difference(). Vérifiez l’ordre des colonnes obtenues si le code exécuté ensuite dépend de leur position. Pour supprimer des colonnes nommées dans un cas courant, drop(columns=...) est généralement le point de départ le plus clair.