HOWTO · Pandas

Pandas Supprimer des lignes

Ce tutoriel explique comment supprimer des lignes à l’aide de la méthode pandas.DataFrame.drop().

Sur cette page

Ce tutoriel montre comment supprimer des lignes d’un DataFrame pandas avec pandas.DataFrame.drop(). Les valeurs transmises à drop() sont des étiquettes d’index. Avec l’index entier par défaut, elles ressemblent souvent à des positions de ligne, mais une étiquette n’est pas nécessairement une position. Les exemples ci-dessous montrent comment sélectionner directement des étiquettes, convertir des positions en étiquettes et supprimer les lignes qui correspondent à une condition portant sur une colonne.

Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]}
)
remaining = people.drop([0, 2])
print(remaining)

Supprimer des lignes à partir des étiquettes d’index

Transmettez une étiquette ou une liste d’étiquettes à drop(). Dans l’exemple ci-dessus, l’index par défaut va de 0 à 4 : les étiquettes 0 et 2 désignent donc les première et troisième lignes. Le DataFrame renvoyé conserve les étiquettes d’origine des lignes restantes ; pandas ne les renumérote pas automatiquement. Utilisez reset_index(drop=True) si un nouvel index consécutif vous est utile pour la suite.

Avec un index personnalisé, transmettez ses étiquettes réelles. Cet exemple autonome utilise des noms comme étiquettes : "A" et "C" sélectionnent les première et troisième entrées uniquement parce que ces étiquettes ont été attribuées à ces lignes :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]},
    index=["A", "B", "C", "D", "E"],
)
remaining = people.drop(["A", "C"])
print(remaining)

Une étiquette absente de l’index provoque une KeyError par défaut. Si les étiquettes sont facultatives, transmettez errors="ignore" pour ignorer celles qui sont absentes. Utilisez cette option avec discernement, car elle peut aussi masquer une faute de frappe dans une étiquette.

Supprimer des lignes par position

drop() accepte des étiquettes, pas des positions de ligne. Pour supprimer des lignes selon leur position à partir de zéro, sélectionnez d’abord ces positions dans l’index, puis transmettez à drop() les étiquettes obtenues. Cette distinction est importante lorsque l’index est personnalisé ou a été réordonné. L’exemple est autonome :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]},
    index=["A", "B", "C", "D", "E"],
)
positions = [0, 2]
labels = people.index.take(positions)
remaining = people.drop(labels)
print(remaining)

Ici, les positions 0 et 2 sont converties en étiquettes "A" et "C" avant la suppression. Si vous connaissez déjà les étiquettes, utilisez-les directement, comme dans la section précédente. Vous pouvez aussi utiliser iloc pour sélectionner des lignes par position lorsque vous souhaitez les conserver plutôt que les supprimer.

Supprimer des lignes selon les valeurs d’une colonne

Pour supprimer les lignes qui correspondent à une condition, trouvez leurs étiquettes d’index et transmettez-les à drop(). Dans cet exemple, la condition sélectionne les âges inférieurs ou égaux à 33 ; le DataFrame obtenu conserve donc les personnes de plus de 33 ans :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [31, 33, 35, 36, 34]},
    index=["A", "B", "C", "D", "E"],
)
remove_labels = people.index[people["Age"] <= 33]
remaining = people.drop(remove_labels)
print(remaining)

Cette méthode est utile lorsque la condition désigne les lignes à supprimer. S’il est plus clair d’indiquer les lignes à conserver, utilisez plutôt un filtrage booléen, par exemple people[people["Age"] > 33]. Pour cette condition, les deux méthodes renvoient les mêmes lignes restantes ; le filtrage peut être plus facile à lire lorsque la règle de conservation constitue l’idée principale.

Comprendre le comportement de DataFrame.drop() et éviter les pièges courants

pandas.DataFrame.drop() renvoie par défaut un nouveau DataFrame et laisse l’objet d’origine inchangé. Affectez le résultat, comme dans chaque exemple, ou utilisez la valeur renvoyée dans une expression ultérieure. L’option inplace=True modifie l’objet d’origine et renvoie None ; une affectation telle que people = people.drop(...) est généralement plus claire, car elle rend le résultat explicite.

Par défaut, drop() supprime des étiquettes de l’index. Pour supprimer des étiquettes de colonne, indiquez axis="columns" (ou columns=[...]) ; cet article porte sur les étiquettes de ligne. N’oubliez pas qu’un index entier par défaut peut faire ressembler les étiquettes à des positions, tandis qu’un index personnalisé rend la distinction visible. Si le résultat vous surprend, vérifiez people.index, assurez-vous que la condition sélectionne les lignes à supprimer et confirmez que vous avez conservé la valeur renvoyée par drop().