Pandas loc vs iloc
-
Bestimmten Wert aus DataFrame unter Angabe von Index und Spaltenlabel mit der Methode
.loc()
auswählen -
Bestimmte Spalten aus dem DataFrame mit der Methode
.loc()
auswählen -
Filtern von Zeilen durch Anwenden von Bedingungen auf Spalten mit der Methode
.loc()
-
Zeilen mit Indizes filtern mit
iloc
- Bestimmte Zeilen und Spalten aus dem DataFrame filtern
-
Bereich von Zeilen und Spalten aus DataFrame mit
iloc
filtern -
Pandas
loc
vsiloc
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 is a backend software engineer at Matrice.ai.
LinkedIn