Fonction df.iloc[] de Pandas

Pandas 常用函数Fonctions courantes 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

import pandas as pd

# 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 :

  1. df.iloc[0]La sélection de la première ligne (position 0) renvoie une Series.
  2. iloc[]Le slicing est fermé à gauche et ouvert à droite, incluant les positions 1, 2, 3, mais pas la position 4.
  3. df.iloc[[1, 3, 4]]Sélectionne des lignes à plusieurs positions spécifiques.
  4. 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

import pandas as pd

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 :

  1. df.iloc[1, 2]La sélection d'une seule cellule renvoie une valeur scalaire.
  2. df.iloc[0, [1, 3]]Sélectionne plusieurs colonnes d'une ligne spécifique.
  3. df.iloc[:, [0, 2]]Un deux-points indique la sélection de toutes les lignes.
  4. 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

import pandas as pd

# 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

import pandas as pd

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 :

  1. 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).
  2. ilocLorsque vous utilisez un tableau booléen, contrairementloc[]au filtrage conditionnel, il sélectionne directement par position.
  3. 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.
  • etloc[]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.

Pandas 常用函数Fonctions courantes de Pandas

Autres extensions