Zugriff nach Label und Position
Rufen Sie Elemente mit .loc (Label) und .iloc (Integer-Position) ab und verstehen Sie den Unterschied zwischen beiden.
Zugriff nach Label und Position ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Pandas & NumPy Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Zwei Möglichkeiten, auf Series-Elemente zuzugreifen
Pandas bietet zwei zentrale Zugriffsmechanismen zur Auswahl von Elementen aus einer Series: .loc für den zugriffs über Indexlabel und .iloc für den zugriff über die ganzzahlige Position. Es ist entscheidend zu verstehen, welchen Mechanismus Sie wann verwenden sollten – bei einer Series mit ganzzahligen Indizes führt die falsche Wahl zu verwirrenden Ergebnissen, und Pandas 2.0 hat viele mehrdeutige direkte Zugriffe mit eckigen Klammern als veraltet markiert.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.loc['b']) # 20 -- by label
print(s.iloc[1]) # 20 -- by position.loc: Zugriff über Indexlabel
.loc greift über das Indexlabel auf Elemente zu. Sie können ein einzelnes Label übergeben (liefert einen Skalar), eine Liste von Labels (liefert eine Series) oder einen Bereich von Labels (beide Grenzen sind eingeschlossen, anders als bei Python-Slices). Wenn das Label nicht existiert, löst Pandas einen KeyError aus. Verwenden Sie .loc, wenn die Labels eine Bedeutung haben, etwa bei Datumsangaben, Namen oder IDs.
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['c']) # 30
print(s.loc[['a', 'c']]) # a:10 c:30
print(s.loc['b':'d']) # b:20 c:30 d:40 -- inclusive.iloc: Zugriff über Position
.iloc greift über die ganzzahlige Position (beginnend bei 0) auf Elemente zu und ignoriert die Indexlabels vollständig. Das Verhalten entspricht dem von Python-Listen: Negative Positionen werden vom Ende aus gezählt, und Slices folgen der Python-Konvention, bei der das Ende exklusiv ist. Verwenden Sie .iloc, wenn Sie unabhängig vom Label das „n-te“ Element benötigen.
import pandas as pd
s = pd.Series([10, 20, 30, 40, 50],
index=['a', 'b', 'c', 'd', 'e'])
print(s.iloc[2]) # 30 -- third element
print(s.iloc[-1]) # 50 -- last element
print(s.iloc[1:4]) # b:20 c:30 d:40 -- exclusive stopWenn sich .loc und .iloc unterscheiden
Der Unterschied ist bei Series mit ganzzahligen Labels besonders wichtig. Hat eine Series die Indexlabels [5, 10, 15], liefert s.loc[5] das Element mit dem Label 5 (das erste Element), während s.iloc[5] einen IndexError auslöst (es gibt nur 3 Elemente). Entscheiden Sie immer danach, ob Sie „das mit X bezeichnete Element“ oder „das X-te Element“ meinen.
import pandas as pd
s = pd.Series([100, 200, 300], index=[5, 10, 15])
print(s.loc[10]) # 200 -- element with label 10
print(s.iloc[1]) # 200 -- second element
# s.loc[1] would raise KeyError -- no label 1Mehrere Labels mit .loc auswählen
Übergeben Sie .loc eine Liste, um mehrere Elemente in beliebiger Reihenfolge und gegebenenfalls auch mehrfach auszuwählen. Das Ergebnis ist eine neue Series mit denselben Labels wie in der übergebenen Liste. Dies ähnelt dem erweiterten Indexing in NumPy, richtet sich jedoch nach Indexlabels statt nach Positionen. Es wird häufig verwendet, um Spalten in Analyse-Pipelines neu anzuordnen oder auszuwählen.
import pandas as pd
s = pd.Series({'Jan': 100, 'Feb': 200, 'Mar': 300, 'Apr': 400})
# Select Q1 months in reverse order
print(s.loc[['Mar', 'Feb', 'Jan']])
# Mar 300
# Feb 200
# Jan 100Auswahl von Label-Bereichen mit .loc
Anders als Python-Slices schließen .loc-Slices beide Grenzen ein. s.loc['b':'d'] liefert die Elemente mit den Labels b, c und d. Das kann überraschend sein, wenn Sie die Python-Konvention mit exklusivem Ende gewohnt sind. Achten Sie darauf, dass die Labels, zwischen denen Sie schneiden, tatsächlich im Index vorhanden sind, da der Slice sonst stillschweigend unerwartete Ergebnisse liefern kann.
import pandas as pd
s = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
print(s.loc['b':'d'])
# b 1
# c 2
# d 3
# dtype: int64
# Note: 'd' is INCLUDED (inclusive stop)Boolesches Indexing mit .loc
Sie können eine boolesche Series an .loc übergeben, um Elemente zu filtern. Die boolesche Series muss denselben Index wie die Ziel-Series haben. Dies entspricht dem booleschen Maskieren in NumPy und unterstützt zusammengesetzte Bedingungen mit & und |. Auch zum Filtern von Zeilen in DataFrames ist dies die übliche Vorgehensweise.
import pandas as pd
s = pd.Series([3, 7, 2, 9, 1], index=['a', 'b', 'c', 'd', 'e'])
print(s.loc[s > 4])
# b 7
# d 9
# dtype: int64Werte mit .loc und .iloc setzen
Sowohl .loc als auch .iloc können auf der linken Seite einer Zuweisung stehen, um Werte direkt zu ändern. Dies ist das korrekte Muster – verkettetes Indexing wie s['a'] = 99 kann in DataFrames eine SettingWithCopyWarning auslösen. Bei Series ist der direkte Zugriff über ein Label im Allgemeinen sicher, aber .loc ist ausdrücklich und wird empfohlen.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s.loc['b'] = 99
print(s)
# a 10
# b 99
# c 30Zugriff auf eine Series mit eckigen Klammern
Die direkte Notation mit eckigen Klammern s['label'] funktioniert für den Zugriff über Labels und ist bei String-Indizes gleichbedeutend mit s.loc['label']. Bei ganzzahligen Indizes war das Verhalten mehrdeutig und wurde in Pandas 2.0 geändert – nun bedeutet es immer Zugriff über das Label. Verwenden Sie aus Gründen der Klarheit und zukunftssicheren Codes immer ausdrücklich .loc oder .iloc, statt sich auf die Auflösung mehrdeutiger Zugriffe mit eckigen Klammern zu verlassen.
import pandas as pd
s = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s['y']) # 20 -- label access via brackets
print(s.loc['y']) # 20 -- explicit and preferredAuf Elemente aus einem DatetimeIndex zugreifen
Wenn eine Series einen DatetimeIndex hat, akzeptiert .loc verkürzte Datumszeichenfolgen für eine bequeme Auswahl von Bereichen. s.loc['2023'] liefert alle Elemente aus dem Jahr 2023, und s.loc['2023-01':'2023-06'] liefert die erste Hälfte des Jahres 2023. Dies ist eine der komfortabelsten Funktionen von Pandas für die Arbeit mit Zeitreihen.
import pandas as pd
dates = pd.date_range('2023-01-01', periods=5, freq='ME')
values = pd.Series([10, 20, 30, 40, 50], index=dates)
print(values.loc['2023-03':'2023-05'])
# 2023-03-31 30
# 2023-04-30 40
# 2023-05-31 50at und iat für schnellen Zugriff auf einzelne Elemente
.at[label] und .iat[position] sind für Skalare optimierte Zugriffsmechanismen – beim Zugriff auf ein einzelnes Element in einer engen Schleife sind sie schneller als .loc und .iloc, da sie den Aufwand für die Rückgabe eines Series-Objekts vermeiden. Sie können keine mehreren Elemente auswählen. Verwenden Sie sie, wenn Sie bei wiederholten Zugriffen auf einzelne Elemente maximale Leistung benötigen.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.at['b']) # 20 -- label scalar access
print(s.iat[2]) # 30 -- position scalar accessKurzer Test
Testen Sie Ihr Verständnis von .loc und .iloc aus dieser Lektion.
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt: .loc greift über das Indexlabel auf Elemente zu und schließt die Enden von Slices ein, .iloc greift über die ganzzahlige Position auf Elemente zu und schließt das Ende von Slices wie Python-Listen aus und .at und .iat sind schnellere Zugriffsmechanismen für einzelne Skalarelemente in Schleifen. Als Nächstes untersuchen wir vektorisierte Operationen auf Series und die automatische Indexausrichtung in Pandas.
Lerne Python mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 30
- Lektionen
- 120
Häufig gestellte Fragen
Ist die Lektion „Zugriff nach Label und Position“ kostenlos?
Ja — der vollständige Text von „Zugriff nach Label und Position“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Pandas & NumPy Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Pandas & NumPy Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Zugriff nach Label und Position“?
Rufen Sie Elemente mit .loc (Label) und .iloc (Integer-Position) ab und verstehen Sie den Unterschied zwischen beiden. Du übst Pandas & NumPy Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Pandas & NumPy Academy zu starten?
Keine Vorkenntnisse erforderlich. Pandas & NumPy Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Zugriff nach Label und Position“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Pandas & NumPy Academy-Lektion Code schreiben und ausführen?
Ja. Jede Pandas & NumPy Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Eine Series erstellen
- Zugriff nach Label und Position
- Vektorisierte Operationen auf Series
- Nützliche Series-Methoden