Pandas df.loc()-Funktion
loc[]Es ist eine Label-basierte Indexierungsmethode in Pandas, mit der Daten anhand von Zeilen- und Spaltenlabels ausgewählt werden. Sie ist eine der intuitivsten und am häufigsten verwendeten DataFrame-Indexierungsmethoden und ermöglicht das präzise Auffinden der benötigten Daten.
Im Gegensatz zur positionsbasierten Indexierung (wie z. B.iloc[]),loc[]Sie verwendet die in den Daten selbst festgelegten Indexlabels. Das bedeutet, dass wir die Zieldaten weiterhin präzise auswählen können, selbst wenn sich die Position der Daten ändert, solange die Labels unverändert bleiben.
Grundlegende Syntax und Parameter
loc[]Es ist der Indexer von DataFrame, aufgerufen über eckige Klammern[]für den Zugriff. Verschiedene Formen von Parametern können innerhalb der eckigen Klammern übergeben werden, um Zeilen, Spalten oder bestimmte Zellen auszuwählen.
Syntaxformat
# 选择单行(返回 Series) DataFrame.loc[行标签] # 选择多行(返回 DataFrame) DataFrame.loc[[行标签1, 行标签2, ...]] # 选择行和列 DataFrame.loc[行标签, 列标签] DataFrame.loc[行切片, 列切片] DataFrame.loc[行条件, 列条件]
Parameterbeschreibung
| Parameterposition | Parametertyp | Beschreibung |
|---|---|---|
| Erster Parameter (Zeilen) | Label, Liste von Labels, Label-Slice, boolesches Array | Wird zum Auswählen von Zeilen verwendet; kann ein einzelnes Label, mehrere Labels, ein Slice oder einen Bedingungsausdruck sein. |
| Zweiter Parameter (Spalten) | Label, Liste von Labels, Label-Slice | Optional, wird zum Auswählen von Spalten verwendet; die Syntax ist dieselbe wie bei der Zeilenauswahl. |
Beschreibung des Rückgabewerts
- Einzelnes Element: Gibt einen Skalarwert zurück (einen einzelnen Wert).
- Einzelne Zeile: Gibt eine Series zurück.
- Mehrere Zeilen: Gibt ein DataFrame zurück.
- Kombination von Zeilen und Spalten: Gibt abhängig vom Auswahlergebnis eine Series oder ein DataFrame zurück.
Beispiele
Lass uns dies anhand reichhaltiger Beispiele vollständig meisternloc[]die Verwendung von ...
Beispiel 1: Grundlegende Verwendung - Verwendung des Standardindex
Wenn das DataFrame den standardmäßigen ganzzahligen Index verwendet,loc[]das Verhalten von ...iloc[]ist ähnlich, verwendet jedoch Labels statt Positionen.
Beispiel
# Ein Beispiel-DataFrame erstellen
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("Ursprüngliches DataFrame:")
print(df)
print()
# loc verwenden, um eine einzelne Zeile auszuwählen (über das Index-Label)
print("Zeile 0 auswählen:")
print(df.loc[0])
print()
# Mehrere Zeilen auswählen
print("Zeilen 1, 3, 4 auswählen:")
print(df.loc[[1, 3, 4]])
print()
# Slicing verwenden, um aufeinanderfolgende Zeilen auszuwählen (Hinweis: loc-Slicing ist an beiden Enden inklusive)
print("Zeilen 1 bis 3 auswählen (einschließlich):")
print(df.loc[1:3])
Ausgabe:
原始 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 行(包含两端):
name age score grade
1 Bob 19 92 A
2 Charlie 17 78 B
3 David 18 90 A
Code-Erklärung:
- Standardmäßig besteht der Index des DataFrame aus den Ganzzahlen 0, 1, 2, 3, 4.
df.loc[0]Die Auswahl der Zeile mit Indexlabel 0 gibt eine Series zurück.df.loc[[1, 3, 4]]Wählt mehrere Zeilen mit bestimmten Indizes aus.- Wichtig:
loc[]Das Slicing ist an beiden Enden inklusiv (anders als beim Python-Slicing),1:3einschließlich der Indizes 1, 2, 3.
Beispiel 2: Benutzerdefinierten Index verwenden
loc[]Die wahre Stärke von loc liegt in der Möglichkeit, benutzerdefinierte Indexlabels zu verwenden, was seiniloc[]grundlegender Unterschied ist.
Beispiel
# DataFrame mit benutzerdefiniertem Index erstellen
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, index=['a', 'b', 'c', 'd', 'e'])
print("DataFrame mit benutzerdefiniertem Index:")
print(df)
print()
# Benutzerdefiniertes Label verwenden, um eine einzelne Zeile auszuwählen
print("Wählen Sie die Zeile mit Index 'b' aus:")
print(df.loc['b'])
print()
# Benutzerdefinierte Labels zum Slicing verwenden
print("Zeilen von Index 'b' bis 'd' auswählen:")
print(df.loc['b':'d'])
print()
# Mehrere nicht aufeinanderfolgende Indizes auswählen
print("Zeilen mit den Indizes 'a', 'c', 'e' auswählen:")
print(df.loc[['a', 'c', 'e']])
Ausgabe:
带自定义索引的 DataFrame:
name age score grade
a Alice 18 85 A
b Bob 19 92 A
c Charlie 17 78 B
d David 18 90 A
e Eve 20 88 B
选择索引为 'b' 的行:
name Bob
age 19
score 92
grade A
Name: b, dtype: object
选择索引 'b' 到 'd' 的行:
name age score grade
b Bob 19 92 A
c Charlie 17 78 B
d David 18 90 A
选择索引 'a', 'c', 'e' 的行:
name age score grade
a Alice 18 85 A
c Charlie 17 78 B
e Eve 20 88 B
Code-Erklärung:
- Ein benutzerdefinierter Index verwendet Zeichenketten 'a', 'b', 'c', 'd', 'e' anstelle von ganzzahligen Indizes.
loc[]Die Verwendung dieser Labels zum Auswählen von Daten ist sehr intuitiv.- Der Slice 'b':'d' enthält die Labels 'b', 'c', 'd' und ist an beiden Enden inklusive.
Beispiel 3: Auswählen bestimmter Spalten
loc[]Sie können nicht nur Zeilen auswählen, sondern gleichzeitig auch Spalten auswählen.
Beispiel
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, index=['a', 'b', 'c', 'd', 'e'])
# Bestimmte Spalten bestimmter Zeilen auswählen
print("Die Spalten name und score für Index 'b' auswählen:")
print(df.loc['b', ['name', 'score']])
print()
# Mehrere Zeilen und Spalten auswählen
print("Die Spalten name und age für die Indizes 'a', 'c' auswählen:")
print(df.loc[['a', 'c'], ['name', 'age']])
print()
# Spezifische Spalten für alle Zeilen auswählen
print("Die Spalten name und grade aller Zeilen:")
print(df.loc[:, ['name', 'grade']])
print()
# Zeilen- und Spalten-Slicing kombinieren
print("Die Spalten name bis score für Indizes 'b' bis 'd':")
print(df.loc['b':'d', 'name':'score'])
Ausgabe:
选择索引 'b' 的 name 和 score 列:
name Bob
score 92
Name: b, dtype: object
选择索引 'a', 'c' 的 name 和 age 列:
name age
a Alice 18
c Charlie 17
所有行的 name 和 grade 列:
name grade
a Alice A
b Bob A
c Charlie B
d David A
e Eve B
索引 'b' 到 'd' 的 name 到 score 列:
name age score
b Bob 19 92
c Charlie 17 78
d David 18 90
Code-Erklärung:
df.loc['b', ['name', 'score']]Das Auswählen bestimmter Spalten einer bestimmten Zeile gibt eine Series zurück.df.loc[['a', 'c'], ['name', 'age']]Das Auswählen mehrerer Zeilen und Spalten gibt ein DataFrame zurück.df.loc[:, ['name', 'grade']]Ein Doppelpunkt bedeutet, alle Zeilen auszuwählen.df.loc['b':'d', 'name':'score']Verwenden Sie Slicing für Zeilen und Spalten gleichzeitig.
Beispiel 4: Verwenden der booleschen Bedingungsauswahl
loc[]Es unterstützt die Verwendung boolescher Arrays oder Bedingungsausdrücke zum Filtern von Daten, was ein sehr leistungsstarkes Feature ist.
Beispiel
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)
# Boolesche Bedingung verwenden, um Zeilen mit score größer als 85 auszuwählen
print("Studierende mit Punktzahlen größer als 85:")
print(df.loc[df['score'] > 85])
print()
# Zusammengesetzte Bedingung: score größer als 85 und age kleiner als 19
print("Studierende mit Punktzahlen größer als 85 und Alter kleiner als 19:")
print(df.loc[(df['score'] > 85) & (df['age'] 85, ['name', 'score']])
Ausgabe:
分数大于 85 的学生:
name age score grade
1 Bob 19 92 A
3 David 18 90 A
4 Eve 20 88 B
分数大于 85 且年龄小于 19 的学生:
name age score grade
3 David 18 90 A
使用布尔数组选择的行:
name age score grade
0 Alice 18 85 A
2 Charlie 17 78 B
4 Eve 20 88 B
分数大于 85 的学生的 name 和 score:
name score
1 Bob 92
3 David 90
4 Eve 88
Code-Erklärung:
df.loc[df['score'] > 85]Bei Verwendung der Filterung mit booleschen Bedingungen werden Zeilen zurückgegeben, die die Bedingung erfüllen.- Zusammengesetzte Bedingungen müssen in Klammern eingeschlossen und verbunden werden mit
&(AND) und|(OR). - Man kann direkt ein boolesches Array übergeben (die Länge muss mit der Anzahl der Zeilen übereinstimmen), um Zeilen auszuwählen.
- Nach der Bedingung kann auch eine Spaltenauswahl hinzugefügt werden, um eine feingranulare Datenfilterung zu erreichen.
Hinweise
loc[]Es verwendet Label-Indizierung, und Slicing ist an beiden Enden inklusiv (im Gegensatz zum nativen Python-Slicing).- Wenn das übergebene Label nicht existiert, wird ein KeyError ausgelöst.
- In booleschen Bedingungen müssen zusammengesetzte Bedingungen Klammern verwenden und
&und|anstelle von Pythonsandundor。 loc[]Das Lesen und Ändern von Daten sind beide sehr praktisch, aber in Big-Data-Szenarien sollte auf die Leistung geachtet werden.
Wichtige Hinweise:
loc[]undiloc[]Es sind zwei verschiedene Indexer; obwohl sie ähnlich aussehen, sind die Prinzipien völlig unterschiedlich:loc[]Basierend auf Labels,iloc[]Basierend auf Positionen.
Zusammenfassung
loc[]Es ist ein labelbasierter Daten-Selektor in Pandas, der eine intuitive und flexible Möglichkeit bietet, auf Daten zuzugreifen. Durch die Kombination von Zeilen- und Spaltenlabels können wir genau die Daten auswählen, die wir benötigen.
Seine Hauptvorteile sind: die Verwendung benutzerdefinierter Indizes, um den Code lesbarer zu machen, die Unterstützung inklusiver Slicing-Syntax und die Möglichkeit, boolesche Bedingungen für komplexe Filterungen zu kombinieren. In der tatsächlichen Datenanalyse,loc[]ist es eine der am häufigsten verwendeten Indizierungsmethoden im täglichen Gebrauch.
Pandas Häufige Funktionen