Comment sélectionner des lignes par index dans un DataFrame Pandas
Souvent, vous souhaiterez peut-être sélectionner les lignes d’un DataFrame pandas en fonction de leur valeur d’index.
Si vous souhaitez sélectionner des lignes basées sur une indexation entière, vous pouvez utiliser la fonction .iloc .
Si vous souhaitez sélectionner des lignes en fonction de l’indexation des étiquettes, vous pouvez utiliser la fonction .loc .
Ce didacticiel fournit un exemple de la façon d’utiliser chacune de ces fonctions dans la pratique.
Exemple 1 : sélectionner des lignes en fonction de l’indexation d’entiers
Le code suivant montre comment créer un DataFrame pandas et utiliser .iloc pour sélectionner la ligne avec une valeur entière d’index de 4 :
import pandas as pd import numpy as np #make this example reproducible np.random.seed(0) #create DataFrame df = pd.DataFrame(np.random.rand(6,2), index=range(0,18,3), columns=['A', 'B']) #view DataFrame df A B 0 0.548814 0.715189 3 0.602763 0.544883 6 0.423655 0.645894 9 0.437587 0.891773 12 0.963663 0.383442 15 0.791725 0.528895 #select the 5th row of the DataFrame df.iloc[[4]] A B 12 0.963663 0.383442
Nous pouvons utiliser une syntaxe similaire pour sélectionner plusieurs lignes :
#select the 3rd, 4th, and 5th rows of the DataFrame
df.iloc[[2, 3, 4]]
A B
6 0.423655 0.645894
9 0.437587 0.891773
12 0.963663 0.383442
Ou nous pourrions sélectionner toutes les lignes d’une plage :
#select the 3rd, 4th, and 5th rows of the DataFrame
df.iloc[2:5]
A B
6 0.423655 0.645894
9 0.437587 0.891773
12 0.963663 0.383442
Exemple 2 : sélectionner des lignes en fonction de l’indexation des étiquettes
Le code suivant montre comment créer un DataFrame pandas et utiliser .loc pour sélectionner la ligne avec une étiquette d’index de 3 :
import pandas as pd import numpy as np #make this example reproducible np.random.seed(0) #create DataFrame df = pd.DataFrame(np.random.rand(6,2), index=range(0,18,3), columns=['A', 'B']) #view DataFrame df A B 0 0.548814 0.715189 3 0.602763 0.544883 6 0.423655 0.645894 9 0.437587 0.891773 12 0.963663 0.383442 15 0.791725 0.528895 #select the row with index label '3' df.loc[[3]] A B 3 0.602763 0.544883
Nous pouvons utiliser une syntaxe similaire pour sélectionner plusieurs lignes avec des étiquettes d’index différentes :
#select the rows with index labels '3', '6', and '9'
df.loc[[3, 6, 9]]
A B
3 0.602763 0.544883
6 0.423655 0.645894
9 0.437587 0.891773
La différence entre .iloc et .loc
Les exemples ci-dessus illustrent la différence subtile entre .iloc et .loc :
- .iloc sélectionne les lignes en fonction d’un index entier . Ainsi, si vous souhaitez sélectionner la 5ème ligne d’un DataFrame, vous utiliserez df.iloc[[4]] puisque la première ligne est à l’index 0, la deuxième ligne est à l’index 1, et ainsi de suite.
- .loc sélectionne les lignes en fonction d’un index étiqueté . Ainsi, si vous souhaitez sélectionner la ligne avec une étiquette d’index de 5, vous utiliserez directement df.loc[[5]].
Ressources additionnelles
Comment obtenir des numéros de ligne dans un DataFrame Pandas
Comment supprimer des lignes avec des valeurs NaN dans Pandas
Comment supprimer la colonne d’index dans Pandas