Pandas loc vs iloc

Suraj Joshi 30 Januar 2023
  1. Bestimmten Wert aus DataFrame unter Angabe von Index und Spaltenlabel mit der Methode .loc() auswählen
  2. Bestimmte Spalten aus dem DataFrame mit der Methode .loc() auswählen
  3. Filtern von Zeilen durch Anwenden von Bedingungen auf Spalten mit der Methode .loc()
  4. Zeilen mit Indizes filtern mit iloc
  5. Bestimmte Zeilen und Spalten aus dem DataFrame filtern
  6. Bereich von Zeilen und Spalten aus DataFrame mit iloc filtern
  7. Pandas loc vs iloc
Pandas loc vs iloc

Dieses Tutorial erklärt, wie wir Daten aus einem Pandas DataFrame mit Hilfe von loc und iloc in Python filtern können. Um Einträge aus dem DataFrame mit iloc zu filtern, verwenden wir den Integer-Index für Zeilen und Spalten, und um Einträge aus dem DataFrame mit loc zu filtern, verwenden wir Zeilen- und Spaltennamen.

Um die Datenfilterung mit loc zu demonstrieren, verwenden wir den DataFrame aus dem folgenden Beispiel.

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)

Ausgabe:

        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

Bestimmten Wert aus DataFrame unter Angabe von Index und Spaltenlabel mit der Methode .loc() auswählen

Wir können der Methode .loc() eine Indexbezeichnung und eine Spaltenbezeichnung als Argument übergeben, um den Wert zu extrahieren, der dem angegebenen Index und der Spaltenbezeichnung entspricht.

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)

Ausgabe:

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-

Es wird der Wert im DataFrame mit der Indexbezeichnung 504 und der Spaltenbezeichnung Grade ausgewählt. Das erste Argument der Methode .loc() stellt den Indexnamen dar, während sich das zweite Argument auf den Spaltennamen bezieht.

Bestimmte Spalten aus dem DataFrame mit der Methode .loc() auswählen

Mit der Methode .loc() können wir auch die gewünschten Spalten aus dem DataFrame filtern. Wir übergeben die Liste der gewünschten Spaltennamen als zweites Argument an die Methode .loc(), um bestimmte Spalten zu filtern.

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)

Ausgabe:

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

Das erste Argument für .loc() ist :, das alle Zeilen im DataFrame bezeichnet. In ähnlicher Weise übergeben wir ["Name", "Age"] als zweites Argument an die Methode .loc(), was bedeutet, dass nur die Spalten Name und Age aus dem DataFrame ausgewählt werden.

Filtern von Zeilen durch Anwenden von Bedingungen auf Spalten mit der Methode .loc()

Wir können auch Zeilen filtern, die die angegebene Bedingung für Spaltenwerte erfüllen, indem wir die Methode .loc() verwenden.

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)

Ausgabe:

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

Es werden alle Schüler im DataFrame mit der Note A ausgewählt.

Zeilen mit Indizes filtern mit 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)

Ausgabe:

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+

Es werden die zweite und dritte Zeile aus dem DataFrame gefiltert.

Wir übergeben den Integer-Index der Zeilen als Argument an die Methode iloc, um Zeilen aus dem DataFrame zu filtern. Hier ist der Integer-Index für die zweite und dritte Zeile 1 bzw. 2, da der Index bei 0 beginnt.

Bestimmte Zeilen und Spalten aus dem DataFrame filtern

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)

Ausgabe:

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-

Es filtert die erste und letzte Spalte, d.h. Name und Grade der zweiten, dritten und vierten Zeile aus dem DataFrame. Wir übergeben die Liste mit den Integer-Indizes der Zeile als erstes Argument und die Liste mit den Integer-Indizes der Spalte als zweites Argument an die Methode iloc.

Bereich von Zeilen und Spalten aus DataFrame mit iloc filtern

Um den Bereich von Zeilen und Spalten zu filtern, können wir List Slicing verwenden und die Slices für jede Zeile und Spalte als Argument an die iloc-Methode übergeben.

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)

Ausgabe:

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

Es werden die zweite, dritte und vierte Zeile sowie die erste und zweite Spalte aus dem DataFrame ausgewählt. 1:4 repräsentiert die Zeilen mit einem Index im Bereich von 1 bis 3 und 4 ist exklusiv in diesem Bereich. Analog dazu repräsentiert 0:2 Spalten mit einem Index im Bereich von 0 bis 1.

Pandas loc vs iloc

Um die Zeilen und Spalten aus dem DataFrame mit loc() zu filtern, müssen wir den Namen der Zeilen und Spalten übergeben, die herausgefiltert werden sollen. Ebenso müssen wir die Integer-Indizes von rows und columns übergeben, die herausgefiltert werden sollen, um die Werte mit iloc() zu filtern.

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-

Es wird gezeigt, wie wir dieselben Werte aus dem DataFrame mit loc und iloc filtern können.

Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Verwandter Artikel - Pandas Filter