HOWTO · Pandas

Comment sélectionner plusieurs colonnes dans un DataFrame Pandas

Apprenez à sélectionner plusieurs colonnes d’un DataFrame Pandas avec les crochets, l’indexeur positionnel `.iloc` et l’indexeur par étiquette `.loc`. Comparez ces syntaxes pour choisir celle qui convient à votre besoin.

Sur cette page

Pour sélectionner plusieurs colonnes d’un DataFrame Pandas par leur nom, passez une liste d’étiquettes entre crochets : df[["Name", "Salary"]]. Utilisez .iloc lorsque vous connaissez les positions des colonnes, et .loc pour sélectionner des lignes et des colonnes à partir de leurs étiquettes.

Utiliser la syntaxe Getitem

La sélection entre crochets est la solution directe lorsque vous connaissez les noms des colonnes. Les crochets extérieurs sélectionnent des éléments du DataFrame ; la liste intérieure fournit les étiquettes. C’est la sélection __getitem__ présentée dans cette section. Pandas renvoie les colonnes demandées dans l’ordre de la liste, quel que soit leur ordre dans le DataFrame d’origine.

L’exemple suivant utilise un seul petit DataFrame pour comparer la sélection par nom, par position et par étiquette. Chaque résultat contient toutes les lignes et les colonnes choisies dans l’ordre demandé.

import pandas as pd

df = pd.DataFrame({
    "Name": ["Alice", "Bob", "Charlie", "David"],
    "Age": [24, 30, 22, 35],
    "City": ["New York", "Los Angeles", "Chicago", "Houston"],
    "Salary": [70000, 80000, 65000, 90000],
})

by_name = df[["Name", "Salary"]]
by_position = df.iloc[:, [0, 3]]
by_label = df.loc[:, ["City", "Age"]]

print("By name:")
print(by_name.to_dict("records"))
print("\nBy position:")
print(by_position.to_dict("records"))
print("\nBy label:")
print(by_label.to_dict("records"))
By name:
[{'Name': 'Alice', 'Salary': 70000}, {'Name': 'Bob', 'Salary': 80000}, {'Name': 'Charlie', 'Salary': 65000}, {'Name': 'David', 'Salary': 90000}]

By position:
[{'Name': 'Alice', 'Salary': 70000}, {'Name': 'Bob', 'Salary': 80000}, {'Name': 'Charlie', 'Salary': 65000}, {'Name': 'David', 'Salary': 90000}]

By label:
[{'City': 'New York', 'Age': 24}, {'City': 'Los Angeles', 'Age': 30}, {'City': 'Chicago', 'Age': 22}, {'City': 'Houston', 'Age': 35}]

L’opération __getitem__ est celle qu’invoque l’accès entre crochets sur un DataFrame ; en pratique, on écrit généralement cette syntaxe plus lisible au lieu d’appeler directement cette méthode spéciale.

Utiliser .iloc pour sélectionner par position

.iloc est l’indexeur Pandas fondé sur les positions entières. Dans df.iloc[:, [0, 3]], les deux-points avant la virgule sélectionnent toutes les lignes, tandis que [0, 3] sélectionne les première et quatrième colonnes. Les positions commencent à zéro : si vous changez l’ordre des colonnes du DataFrame, ces nombres peuvent donc désigner d’autres données. Utilisez .iloc lorsque la position a un sens pour vous ou lorsque les étiquettes ne sont pas disponibles.

Utiliser .loc pour sélectionner par étiquette

.loc est l’indexeur fondé sur les étiquettes. Dans df.loc[:, ["City", "Age"]], : est le sélecteur de lignes et la liste d’étiquettes est le sélecteur de colonnes. Les colonnes sont ainsi renvoyées dans l’ordre demandé : City, puis Age. Vous pouvez aussi combiner une condition sur les lignes et une liste de colonnes, comme dans df.loc[df["Age"] > 25, ["Name", "City"]], pour ne conserver que les lignes correspondantes et renvoyer uniquement ces colonnes. Utilisez .loc lorsque la sélection dépend des étiquettes ou lorsque vous devez sélectionner simultanément des lignes et des colonnes.

Conclusion

Utilisez df[["a", "b"]] pour sélectionner plusieurs colonnes nommées, .iloc pour les positions entières et .loc pour les étiquettes, avec la possibilité de filtrer les lignes. Choisissez les étiquettes lorsque les noms des colonnes décrivent ce dont vous avez besoin ; choisissez les positions lorsque leur ordre est l’information pertinente.

FAQ

Comment sélectionner des colonnes par leur nom ? Passez une liste d’étiquettes entre les crochets du DataFrame, par exemple df[["column1", "column2"]].

Quelle est la différence entre .iloc et .loc ? .iloc sélectionne à partir de positions entières commençant à zéro ; .loc sélectionne à partir d’étiquettes. Les deux acceptent des sélecteurs de lignes et de colonnes séparés par une virgule.

Peut-on sélectionner des lignes et des colonnes en même temps ? Oui. Avec .loc, placez avant la virgule une étiquette de ligne ou une condition, puis les étiquettes de colonnes souhaitées, par exemple df.loc[df["Age"] > 25, ["Name", "City"]].

Quelle syntaxe choisir ? Utilisez les crochets avec une liste lorsque vous connaissez les noms des colonnes, .iloc lorsque vous connaissez leurs positions entières et .loc lorsque vous voulez sélectionner par étiquette et éventuellement filtrer les lignes en même temps.

Que faire si j’ai besoin de nombreuses colonnes ? Placez les noms souhaités dans une liste. Si les colonnes forment une plage contiguë, .iloc peut utiliser une tranche ; gardez à l’esprit qu’une tranche .iloc s’arrête avant la position de fin. Pour un ensemble non contigu, fournissez une liste de positions ou d’étiquettes.