Fonction df.iloc[] de Pandas
iloc[]C'est une méthode d'indexation basée sur la position entière dans Pandas, utilisée pour sélectionner des données par numéros de ligne et de colonne. Elle estloc[]différent,iloc[]entièrement basée sur la position des données (index entier commençant à 0), sans tenir compte des étiquettes définies sur les données elles-mêmes.
Lorsque vous devez sélectionner des données par position, ou sélectionner des données sans connaître les étiquettes d'index spécifiques,iloc[]c'est le meilleur choix. Sa méthode de fonctionnement est très similaire à l'indexation des listes Python, ce qui la rend très intuitive pour les utilisateurs de Python.
Syntaxe de base et paramètres
iloc[]C'est l'indexeur de DataFrame, accessible via des crochets[]Il n'accepte que des entiers, des listes d'entiers, des tranches d'entiers ou des tableaux booléens comme paramètres.
Format de syntaxe
# 选择单行(返回 Series) DataFrame.iloc[行号] # 选择多行(返回 DataFrame) DataFrame.iloc[[行号1, 行号2, ...]] # 使用切片选择连续行 DataFrame.iloc[起始行:结束行] # 选择行和列 DataFrame.iloc[行号, 列号] DataFrame.iloc[行切片, 列切片] DataFrame.iloc[行列表, 列列表]
Description du paramètre
| Position des paramètres | Type de paramètre | Description |
|---|---|---|
| Premier paramètre (lignes) | Entier, liste d'entiers, tranche d'entiers, tableau booléen | Utilisé pour sélectionner des lignes, en fonction de la position (à partir de 0). |
| Deuxième paramètre (colonnes) | Entier, liste d'entiers, tranche d'entiers | Facultatif, utilisé pour sélectionner des colonnes, également basé sur la position. |
Description de la valeur de retour
- Élément unique: renvoie une valeur scalaire.
- Ligne unique: renvoie une Series.
- Plusieurs lignes: renvoie un DataFrame.
- Combinaison de lignes et de colonnes: renvoie une Series ou un DataFrame selon le résultat de la sélection.
Exemples
Maîtrisons de manière exhaustiveiloc[]son utilisation à travers de riches exemples.
Exemple 1 : Utilisation de base - Sélection de lignes
iloc[]Utilise l'indexation basée sur la position, très similaire à l'indexation des listes Python.
Exemple
# Créer un DataFrame d'exemple
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
print("DataFrame d'origine :")
print(df)
print()
# Sélectionner la première ligne (index 0)
print("Sélectionner la première ligne (position 0) :")
print(df.iloc[0])
print()
# Sélectionner plusieurs lignes
print("Sélectionner les lignes 1, 3, 4 :")
print(df.iloc[[1, 3, 4]])
print()
# Utiliser le slicing pour sélectionner des lignes consécutives (remarque : le slicing iloc est fermé à gauche et ouvert à droite, comme en Python)
print("Sélectionner les lignes 1 à 3 (positions 1, 2, 3) :")
print(df.iloc[1:4])
print()
# Sélectionner les 3 premières lignes
print("Les 3 premières lignes :")
print(df.iloc[:3])
Sortie :
原始 DataFrame:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
4 Eve 20 88 B
选择第一行(位置 0):
name Alice
age 18
score 85
grade A
Name: 0, dtype: object
选择第 1、3、4 行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
选择第 1 行到第 3 行(位置 1、2、3):
name age score grade
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
前 3 行:
name age score grade
0 Alice 18 85 A
1 Bob 19 92 A
2 Charlie 17 78 B
Analyse du code :
df.iloc[0]La sélection de la première ligne (position 0) renvoie une Series.iloc[]Le slicing est fermé à gauche et ouvert à droite, incluant les positions 1, 2, 3, mais pas la position 4.df.iloc[[1, 3, 4]]Sélectionne des lignes à plusieurs positions spécifiques.df.iloc[:3]Omettre la position de départ signifie commencer à 0.
Exemple 2 : Sélection de lignes et de colonnes spécifiques
iloc[]Vous pouvez sélectionner des lignes et des colonnes simultanément, en les localisant précisément par leurs numéros de position.
Exemple
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# Sélectionner une seule cellule (deuxième ligne, troisième colonne)
print("Sélectionnez la cellule à la position [1, 2] :")
print(df.iloc[1, 2]) # renvoie 92
print()
# Sélectionner des colonnes spécifiques d'une ligne donnée
print("Sélectionnez les colonnes 1 et 3 de la ligne 0 :")
print(df.iloc[0, [1, 3]])
print()
# Sélectionner plusieurs lignes et colonnes
print("Sélectionnez les lignes 0, 2, 4 et les colonnes 0, 2 :")
print(df.iloc[[0, 2, 4], [0, 2]])
print()
# Sélectionner des colonnes spécifiques de toutes les lignes
print("Colonnes 0 et 2 de toutes les lignes :")
print(df.iloc[:, [0, 2]])
print()
# Combiner le découpage des lignes et des colonnes
print("Lignes 1 à 3, colonnes 0 à 2 (exclu) :")
print(df.iloc[1:4, :3])
Sortie :
选择位置 [1, 2] 的单元格:
92
选择第 0 行的第 1 和第 3 列:
age 19
grade A
Name: 0, dtype: object
选择第 0、2、4 行的第 0、2 列:
name score
0 Alice 85
2 Charlie 78
4 Eve 88
所有行的第 0 和第 2 列:
name score
0 Alice 85
1 Bob 92
2 Charlie 78
3 David 90
4 Eve 88
第 1 到 3 行的第 0 到第 2 列(不含):
name age
1 Bob 19
2 Charlie 17
3 David 18
Analyse du code :
df.iloc[1, 2]La sélection d'une seule cellule renvoie une valeur scalaire.df.iloc[0, [1, 3]]Sélectionne plusieurs colonnes d'une ligne spécifique.df.iloc[:, [0, 2]]Un deux-points indique la sélection de toutes les lignes.iloc[]Le découpage suit les conventions de Python, fermé à gauche et ouvert à droite (en excluant la position de fin).
Exemple 3 : Utilisation avec un index personnalisé.
Lorsque le DataFrame possède un index personnalisé,iloc[]les données sont toujours sélectionnées par position, indépendamment des étiquettes d'index.
Exemple
# Créer un DataFrame avec un index personnalisé
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88]
}
df = pd.DataFrame(data, index=['a', 'b', 'c', 'd', 'e'])
print("DataFrame avec un index personnalisé :")
print(df)
print()
# iloc sélectionne toujours par position, sans être affecté par l'index personnalisé
print("iloc")
print(df.iloc[0])
print()
print("iloc[1:3] sélectionne les lignes 2 et 3 (positions 1, 2) :")
print(df.iloc[1:3])
print()
# Utiliser l'indexation négative (en comptant depuis la fin)
print("Dernière ligne (position -1) :")
print(df.iloc[-1])
print()
print("3 dernières lignes :")
print(df.iloc[-3:])
Sortie :
带自定义索引的 DataFrame:
name age score
a Alice 18 85
b Bob 19 92
c Charlie 17 78
d David 18 90
e Eve 20 88
iloc[0] 选择第一行(位置 0),与标签 'a', 'b', 'c' 无关:
name Alice
age 18
score 85
Name: a, dtype: object
iloc[1:3] 选择第 2、3 行(位置 1、2):
name age score
b Bob 19 92
c Charlie 17 78
最后一行(位置 -1):
name Eve
age 20
score 88
Name: e, dtype: object
倒数 3 行:
name age score
c Charlie 17 78
d David 18 90
e Eve 20 88
Analyse du code :
- Même si le DataFrame utilise un index personnalisé ('a', 'b', 'c', 'd', 'e'),
iloc[]il sélectionne toujours par position. iloc[0]Sélectionne toujours la première ligne (position physique), quel que soit le libellé d'index.ilocPrend en charge l'indexation négative : -1 représente la dernière ligne, -2 l'avant-dernière ligne, et ainsi de suite.
Exemple 4 : Sélection avec des tableaux booléens
iloc[]Il prend également en charge la sélection à l'aide de tableaux booléens, ce qui est utile pour le filtrage conditionnel.
Exemple
data = {
'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'age': [18, 19, 17, 18, 20],
'score': [85, 92, 78, 90, 88],
'grade': ['A', 'A', 'B', 'A', 'B']
}
df = pd.DataFrame(data)
# Sélectionner à l'aide d'un tableau booléen
bool_array = [True, False, True, False, True]
print("Lignes sélectionnées à l'aide du tableau booléen [True, False, True, False, True] :")
print(df.iloc[bool_array])
print()
# Utilisation avec des conditions (calculez d'abord le tableau booléen, puis utilisez-le avec iloc)
# Sélectionner les lignes ayant un score supérieur à 85
condition = df['score'] > 85
print("Lignes dont le score est supérieur à 85 :")
print(df.iloc[condition.values]) # Obtenir le tableau booléen
print()
# Sélectionner des colonnes spécifiques après avoir sélectionné des lignes à des positions spécifiques
print("Lignes 1 et 3, colonnes 1 et 2 :")
print(df.iloc[[1, 3], 1:3])
Sortie :
使用布尔数组 [True, False, True, False, True] 选择的行:
name age score grade
0 Alice 18 85 A
2 Charlie 17 78 B
4 Eve 20 88 B
分数大于 85 的行:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
第 1、3 行的第 1、2 列:
age score
1 19 92
3 18 90
Analyse du code :
- La longueur du tableau booléen doit correspondre au nombre de lignes (pour la sélection de lignes) ou au nombre de colonnes (pour la sélection de colonnes).
ilocLorsque vous utilisez un tableau booléen, contrairementloc[]au filtrage conditionnel, il sélectionne directement par position.- Vous pouvez utiliser un pas de tranche pour sélectionner des motifs spécifiques, comme sélectionner une ligne sur deux.
Notes
iloc[]Il utilise une indexation positionnelle ; le découpage suit les conventions Python (borne gauche incluse, borne droite exclue).- Si une position hors limites est transmise, une IndexError est levée.
- Prend en charge l'indexation négative : -1 représente la dernière ligne, -2 l'avant-dernière ligne.
- et
loc[]En revanche,iloc[]il ne prend pas en charge le filtrage direct avec des expressions conditionnelles ; vous devez d'abord calculer un tableau booléen.
Remarque importante :
loc[]etiloc[]La différence est un point clé dans l'apprentissage de Pandas.loc[]loc est basé sur les étiquettes,iloc[]iloc est basé sur les positions. En développement, il est recommandé de bien distinguer les deux pour éviter les erreurs causées par la confusion.
Résumé
iloc[]Il s'agit d'un sélecteur de données basé sur la position entière dans Pandas, offrant une expérience d'indexation similaire aux listes Python. Sa principale caractéristique est qu'il est entièrement basé sur la position des données (à partir de 0) et n'est pas affecté par les étiquettes d'index personnalisées.
En pratique,iloc[]il est particulièrement adapté aux scénarios suivants : lorsque vous devez sélectionner des données par position, lorsque vous devez utiliser une indexation négative, lorsque vous devez utiliser des pas de tranche, et lors de la sélection de données sans certaines étiquettes d'index. Combiné avecloc[]etiloc[], il peut gérer de manière flexible divers besoins de sélection de données.
Fonctions courantes de Pandas