Pandas-Datenauswahl (loc / iloc / at)

Die Datenauswahl ist eine der am häufigsten verwendeten Operationen in Pandas. Das Verständnisloc、iloc、atder Unterschiede und Anwendungsfälle ermöglicht es Ihnen, Daten effizienter zu verarbeiten.


Unterschied zwischen loc und iloc

Merkmal loc iloc
Indexierungsmethode Label-basierte Indexierung Integer-basierte (positionsbezogene) Indexierung
Slicing Schließt die Endposition ein Schließt die Endposition aus
Einzelner Wert Gibt einen Skalar zurück Gibt einen Skalar zurück
Empfohlenes Szenario Wenn explizite Index-Labels vorhanden sind Beim Auswählen nach Position

Beispiel

import pandas as pd

# Beispiel-DataFrame erstellen
df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu", "Qian Qi"],
    "Alter": [25, 30, 28, 35, 22],
    "City": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen", "Hangzhou"]
}, index=[1, 3, 5, 7, 9])  # Hinweis: Der Index ist nicht fortlaufend

print("DataFrame:")
print(df)
print()

# loc: Label-Indizierung verwenden (Ende inklusive)
print("df.loc[1:5] (Label-Slice, enthält 5):")
print(df.loc[1:5])
print()

# iloc: Positionsindizierung verwenden (Ende ausschließlich)
print("df.iloc[0:2] (Positions-Slice, schließt 2 aus):")
print(df.iloc[0:2])

Verwendung von loc

Zeilen auswählen

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"],
    "Alter": [25, 30, 28, 35],
    "City": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
}, index=["a", "b", "c", "d"])

# Eine einzelne Zeile auswählen (gibt eine Series zurück)
print("Eine Zeile auswählen:")
print(df.loc["a"])
print()

# Mehrere Zeilen auswählen
print("Mehrere Zeilen auswählen:")
print(df.loc[["a", "c"]])
print()

# Slice-Auswahl (schließt Start und Ende ein)
print("Slice-Auswahl:")
print(df.loc["a":"c"])

Spalten auswählen

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    "Alter": [25, 30, 28],
    "City": ["Beijing", "Shanghai", "Guangzhou"]
}, index=["a", "b", "c"])

# Eine einzelne Spalte auswählen
print("Eine einzelne Spalte auswählen:")
print(df.loc[:, "Name"])
print()

# Mehrere Spalten auswählen
print("Mehrere Spalten auswählen:")
print(df.loc[:, ["Name", "City"]])
print()

# Slice-Auswahl von Spalten
print("Spalten per Slice auswählen:")
print(df.loc[:, "Name":"City"])

Auswählen bestimmter Zeilen und Spalten (empfohlene Vorgehensweise)

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"],
    "Alter": [25, 30, 28, 35],
    "City": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
}, index=["a", "b", "c", "d"])

# Bestimmte Zeilen und Spalten auswählen
print("Einen einzelnen Wert auswählen:")
print(df.loc["a", "Name"])  # Gibt "Zhang San" zurück
print(type(df.loc["a", "Name"]))  # Der Typ ist str
print()

# Mehrere Zeilen und Spalten auswählen
print("Teilmenge auswählen:")
print(df.loc[["a", "c"], ["Name", "City"]])
print()

# Bedingte Auswahl
print("Zeilen mit Age größer als 28:")
print(df.loc[df["Age"] > 28])

Verwendung von iloc

Auswahl nach Position

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"],
    "Alter": [25, 30, 28, 35],
    "City": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]
})

# Zeile 0 auswählen
print("Zeile 0 auswählen:")
print(df.iloc[0])
print()

# Die ersten 3 Zeilen auswählen
print("Die ersten 3 Zeilen auswählen:")
print(df.iloc[:3])
print()

# Bestimmte Zeilen auswählen
print("Bestimmte Zeilen auswählen:")
print(df.iloc[[0, 2, 3]])
print()

# Negative Indizierung (vom Ende aus)
print("Die letzte Zeile auswählen:")
print(df.iloc[-1])
print()

print("Die letzten 3 Zeilen auswählen:")
print(df.iloc[-3:])

Spalten auswählen

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu"],
    "Alter": [25, 30, 28],
    "City": ["Beijing", "Shanghai", "Guangzhou"]
})

# Spalte 0 auswählen
print("Spalte 0:")
print(df.iloc[:, 0])
print()

# Spalten 1 und 2 auswählen
print("Mehrere Spalten auswählen:")
print(df.iloc[:, [1, 2]])
print()

# Slice-Auswahl
print("Spalten per Slice auswählen:")
print(df.iloc[:, 0:2])

at und iat (einen einzelnen Wert abrufen)

atundiatsind Zugriffsmethoden speziell für das Abrufen/Setzen eines einzelnen Werts, was schneller ist alslocundiloc>更快。

Beispiel

import pandas as pd
import time
import numpy as np

# Erstelle einen großen DataFrame für Leistungstests
df = pd.DataFrame(np.random.randn(1000, 10), columns=[f"col_{i}" for i in range(10)])

# at ruft einen einzelnen Wert ab (Label-Indizierung)
print(f"at: {df.at[0, 'col_0']}")

# iat ruft einen einzelnen Wert ab (Positionsindizierung)
print(f"iat: {df.iat[0, 0]}")

# Leistungsvergleich
n = 10000

start = time.time()
for _ in range(n):
    _ = df.iloc[0, 0]
print(f"iloc time: {time.time() - start:.4f}s")

start = time.time()
for _ in range(n):
    _ = df.iat[0, 0]
print(f"iat-Zeit: {time.time() - start:.4f}s")

Bedingte Auswahl

Das Filtern von Daten mithilfe boolescher Bedingungen ist eine der häufigsten Operationen.

Beispiel

import pandas as pd

df = pd.DataFrame({
    "Name": ["Zhang San", "Li Si", "Wang Wu", "Zhao Liu"],
    "Alter": [25, 30, 28, 35],
    "City": ["Beijing", "Shanghai", "Guangzhou", "Beijing"],
    "Salary": [12000, 15000, 11000, 18000]
})

# Einzelne Bedingung
print("Mitarbeiter älter als 28:")
print(df[df["Age"] > 28])
print()

# Mehrere Bedingungen (mit & | ~)
print("Peking und Gehalt größer als 12000:")
print(df[(df["City"] == "Peking") & (df["Salary"] > 12000)])
print()

# isin-Filterung
print("Stadt ist Beijing oder Shanghai:")
print(df[df["City"].isin(["Beijing", "Shanghai"])])
print()

# String-Enthaltensein
print("Name enthält 'San':")
print(df[df["Name"].str.contains("San")])

Hinweise

1. Slicing schließt die Endposition ein

locSlicing schließt die Endposition ein,ilocenthält es nicht.

2. Es tritt ein Fehler auf, wenn der Index nicht existiert

Verwendunglocwenn der Index nicht existiert, wird ein KeyError ausgelöst. Sie könnenloc[index_list]in Kombination mitreindex。

3. Die Verwendung wird empfohlenloc

becauselocBesser lesbar und weniger fehleranfällig, es sei denn, Sie müssen nach Position auswählen.

at/iatIst der schnellste Weg, auf einen einzelnen Wert zuzugreifen.loc/ilocWird verwendet, um mehrere Werte auszuwählen. Die Wahl der geeigneten Methode kann die Leistung und Lesbarkeit des Codes verbessern.

Weitere Erweiterungen