Pandas loc contre iloc

Suraj Joshi 30 janvier 2023
  1. Sélectionner une valeur particulière dans la DataFrame en spécifiant l’index et le libellé de la colonne en utilisant la méthode .loc()
  2. Sélectionner des colonnes particulières dans le DataFrame en utilisant la méthode .loc()
  3. Filtrer les lignes en appliquant une condition aux colonnes à l’aide de la méthode .loc()
  4. Filtrer les lignes avec des indices en utilisant iloc
  5. Filtrer des lignes et des colonnes particulières du DataFrame
  6. Filtrer la plage des lignes et des colonnes de la DataFrame en utilisant la méthode iloc
  7. Pandas loc vs iloc
Pandas loc contre iloc

Ce tutoriel explique comment filtrer les données d’un Pandas DataFrame en utilisant loc et iloc en Python. Pour filtrer les entrées du DataFrame en utilisant iloc, nous utilisons l’index entier pour les lignes et les colonnes, et pour filtrer les entrées du DataFrame en utilisant loc, nous utilisons les noms de lignes et de colonnes.

Pour démontrer le filtrage des données en utilisant loc, nous utiliserons le DataFrame décrit dans l’exemple suivant.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print(student_df)

Production :

        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Sélectionner une valeur particulière dans la DataFrame en spécifiant l’index et le libellé de la colonne en utilisant la méthode .loc()

Nous pouvons passer un label d’index et un label de colonne comme argument à la méthode .loc() pour extraire la valeur correspondant à l’index et au label de colonne donnés.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)
print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("The Grade of student with Roll No. 504 is:")
value = student_df.loc[504, "Grade"]
print(value)

Production :

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

The Grade of student with Roll No. 504 is:
A-

Il sélectionne la valeur dans la DataFrame avec le label d’index comme 504 et le label de colonne Grade. Le premier argument de la méthode .loc() représente le nom de l’index, tandis que le second argument se réfère au nom de la colonne.

Sélectionner des colonnes particulières dans le DataFrame en utilisant la méthode .loc()

Nous pouvons également filtrer les colonnes requises du DataFrame en utilisant la méthode .loc(). Nous passons la liste des noms de colonnes requises comme deuxième argument à la méthode .loc() pour filtrer les colonnes spécifiées.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("The name and age of students in the DataFrame are:")
value = student_df.loc[:, ["Name", "Age"]]
print(value)

Production :

The DataFrame of students with marks is:
        Name Age      City Grade
501    Alice   17 New York     A
502   Steven   20 Portland    B-
503 Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

The name and age of students in the DataFrame are:
        Name Age
501    Alice   17
502   Steven   20
503 Neesham   18
504    Chris   21
505    Alice   15

Le premier argument du .loc() est :, qui désigne toutes les lignes du DataFrame. De même, nous passons ["Name", "Age"] comme deuxième argument à la méthode .loc() qui représente de ne sélectionner que les colonnes Name et Age du DataFrame.

Filtrer les lignes en appliquant une condition aux colonnes à l’aide de la méthode .loc()

Nous pouvons également filtrer les lignes qui remplissent la condition spécifiée pour les valeurs des colonnes en utilisant la méthode .loc().

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Students with Grade A are:")
value = student_df.loc[student_df.Grade == "A"]
print(value)

Production :

The DataFrame of students with marks is:
        Name Age      City Grade
501    Alice   17 New York     A
502   Steven   20 Portland    B-
503 Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Students with Grade A are:
      Name Age      City Grade
501 Alice   17 New York     A
505 Alice   15    Austin     A

Il sélectionne tous les élèves de la DataFrame avec la note A.

Filtrer les lignes avec des indices en utilisant iloc

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("2nd and 3rd rows in the DataFrame:")
filtered_rows = student_df.iloc[[1, 2]]
print(filtered_rows)

Production :

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

2nd and 3rd rows in the DataFrame:
        Name  Age      City Grade
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+

Il filtre les deuxième et troisième lignes du DataFrame.

Nous passons l’index entier des lignes comme argument à la méthode iloc pour filtrer les lignes de la DataFrame. Ici, les index entiers pour les deuxième et troisième lignes sont respectivement 1 et 2, car l’index commence à partir de 0.

Filtrer des lignes et des colonnes particulières du DataFrame

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Filtered values from the DataFrame:")
filtered_values = student_df.iloc[[1, 2, 3], [0, 3]]
print(filtered_values)

Production :

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Filtered values from the DataFrame:
        Name Grade
502   Steven    B-
503  Neesham    B+
504    Chris    A-

Il filtre la première et la dernière colonne, c’est-à-dire Name et Grade de la deuxième, troisième et quatrième ligne du DataFrame. Nous passons la liste avec les indices entiers de la ligne comme premier argument et la liste avec les indices entiers de la colonne comme deuxième argument à la méthode iloc.

Filtrer la plage des lignes et des colonnes de la DataFrame en utilisant la méthode iloc

Pour filtrer l’éventail des lignes et des colonnes, nous pouvons utiliser le découpage en listes et passer les tranches de chaque ligne et colonne en argument à la méthode iloc.

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Filtered values from the DataFrame:")
filtered_values = student_df.iloc[1:4, 0:2]
print(filtered_values)

Production :

The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Filtered values from the DataFrame:
        Name  Age
502   Steven   20
503  Neesham   18
504    Chris   21

Il sélectionne les deuxième, troisième et quatrième lignes et les première et deuxième colonnes de la DataFrame. 1:4 représente les lignes avec un index allant de 1 à 3 et 4 est exclusif dans la plage. De même, 0:2 représente les colonnes avec un indice allant de 0 à 1.

Pandas loc vs iloc

Pour filtrer les lignes et colonnes du DataFrame en utilisant loc(), nous devons transmettre le nom des lignes et des colonnes à filtrer. De même, nous devons passer les indices entiers de lignes et colonnes à filtrer pour filtrer les valeurs en utilisant iloc().

import pandas as pd

roll_no = [501, 502, 503, 504, 505]

student_df = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [17, 20, 18, 21, 15],
        "City": ["New York", "Portland", "Boston", "Seattle", "Austin"],
        "Grade": ["A", "B-", "B+", "A-", "A"],
    },
    index=roll_no,
)

print("The DataFrame of students with marks is:")
print(student_df)
print("")
print("Filtered values from the DataFrame using loc:")
iloc_filtered_values = student_df.loc[[502, 503, 504], ["Name", "Age"]]
print(iloc_filtered_values)
print("")
print("Filtered values from the DataFrame using iloc:")
iloc_filtered_values = student_df.iloc[[1, 2, 3], [0, 3]]
print(iloc_filtered_values)
The DataFrame of students with marks is:
        Name  Age      City Grade
501    Alice   17  New York     A
502   Steven   20  Portland    B-
503  Neesham   18    Boston    B+
504    Chris   21   Seattle    A-
505    Alice   15    Austin     A

Filtered values from the DataFrame using loc:
        Name  Age
502   Steven   20
503  Neesham   18
504    Chris   21

Filtered values from the DataFrame using iloc:
        Name Grade
502   Steven    B-
503  Neesham    B+
504    Chris    A-

Il montre comment nous pouvons filtrer les mêmes valeurs à partir de DataFrame en utilisant loc et iloc.

Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Article connexe - Pandas Filter