Pandas df.loc()-Funktion

Pandas 常用函数Pandas Häufige Funktionen


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

import pandas as pd

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

  1. Standardmäßig besteht der Index des DataFrame aus den Ganzzahlen 0, 1, 2, 3, 4.
  2. df.loc[0]Die Auswahl der Zeile mit Indexlabel 0 gibt eine Series zurück.
  3. df.loc[[1, 3, 4]]Wählt mehrere Zeilen mit bestimmten Indizes aus.
  4. 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

import pandas as pd

# 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

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

  1. df.loc['b', ['name', 'score']]Das Auswählen bestimmter Spalten einer bestimmten Zeile gibt eine Series zurück.
  2. df.loc[['a', 'c'], ['name', 'age']]Das Auswählen mehrerer Zeilen und Spalten gibt ein DataFrame zurück.
  3. df.loc[:, ['name', 'grade']]Ein Doppelpunkt bedeutet, alle Zeilen auszuwählen.
  4. 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

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)

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

  1. df.loc[df['score'] > 85]Bei Verwendung der Filterung mit booleschen Bedingungen werden Zeilen zurückgegeben, die die Bedingung erfüllen.
  2. Zusammengesetzte Bedingungen müssen in Klammern eingeschlossen und verbunden werden mit&(AND) und|(OR).
  3. Man kann direkt ein boolesches Array übergeben (die Länge muss mit der Anzahl der Zeilen übereinstimmen), um Zeilen auszuwählen.
  4. 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 常用函数Pandas Häufige Funktionen

Andere Erweiterungen