Pandas & NumPy Academy · Lektion

Boolesche Maskierung und Fancy Indexing

Filtern Sie Arrays mit booleschen Bedingungen und wählen Sie beliebige Elemente mithilfe von Integer-Indexarrays aus.

Lektion 4 von 413 Schritte

Boolesche Maskierung und Fancy Indexing ist eine kostenlose Pandas & NumPy Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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.

Boolesche Arrays als Masken

Eine boolesche Maske ist ein Array aus True- und False-Werten. Verwenden Sie sie als Index, um nur die mit True markierten Elemente zu behalten – Ihr wichtigstes Werkzeug zum Filtern.

import numpy as np

a = np.array([5, 3, 8, 1, 9, 2, 7])
mask = a > 4
print(mask)       # [ True False  True False  True False  True]
print(a[mask])    # [5 8 9 7]

Zusammengesetzte boolesche Bedingungen

Erstellen Sie zusammengesetzte Filter mit & (und), | (oder) und ~ (nicht). Setzen Sie jede Bedingung immer in Klammern, sonst kann die Operatorrangfolge zu unerwarteten Ergebnissen führen.

import numpy as np

a = np.array([3, 7, 2, 9, 1, 6, 4, 8])

# Elements between 4 and 8 inclusive
result = a[(a >= 4) & (a <= 8)]
print(result)   # [7 6 4 8]

# Elements less than 3 or greater than 7
result2 = a[(a < 3) | (a > 7)]
print(result2)  # [2 9 1 8]

Werte mit boolescher Indizierung ändern

Sie können einer booleschen Auswahl direkt Werte zuweisen und so nur die passenden Elemente an Ort und Stelle ändern. Das ist der schnellste Weg, Ausreißer zu begrenzen oder fehlende Werte aufzufüllen.

import numpy as np

a = np.array([5, -3, 8, -1, 2, -7])
a[a < 0] = 0    # zero out negatives in-place
print(a)        # [5 0 8 0 2 0]

# Cap values above 6
a[a > 6] = 6
print(a)        # [5 0 6 0 2 0]

Boolesche Maskierung bei 2-D-Arrays

Eine boolesche Maske auf einem 2-D-Array liefert immer ein flaches 1-D-Ergebnis. Um ganze Zeilen auszuwählen, erstellen Sie aus einer Spalte eine 1-D-Maske und indizieren Sie entlang der Achse 0.

import numpy as np

m = np.array([[1, 5], [3, 2], [8, 4], [6, 7]])
# Select rows where first column > 4
mask = m[:, 0] > 4
print(mask)     # [False False  True  True]
print(m[mask])  # [[8 4] [6 7]]

np.where mit Masken

np.where(condition, x, y) behält die Form des Arrays bei: Es wählt x aus, wo die Bedingung erfüllt ist, und andernfalls y. Ideal, um Werte auszutauschen, ohne das Array abzuflachen.

import numpy as np

a = np.array([3, -1, 5, -2, 4])
result = np.where(a >= 0, a, 0)  # keep positives, replace negatives
print(result)  # [3 0 5 0 4]

# Recode: above-average -> 'high', else -> 'low'
labels = np.where(a >= a.mean(), 'high', 'low')
print(labels)  # ['high' 'low' 'high' 'low' 'high']

Grundlagen der Fancy-Indizierung

Fancy-Indizierung bedeutet, ein Array mit Ganzzahlindizes zu übergeben, um bestimmte Elemente auszuwählen – in beliebiger Reihenfolge und auch mehrfach. Sie liefert immer eine Kopie zurück.

import numpy as np

a = np.array([10, 20, 30, 40, 50])
idx = np.array([4, 1, 1, 3])
print(a[idx])   # [50 20 20 40]

# 2D index shape -> 2D output
idx2d = np.array([[0, 2], [4, 1]])
print(a[idx2d])  # [[10 30] [50 20]]

Fancy-Indizierung bei 2-D-Arrays

Bei einem 2-D-Array wählen gepaarte Indexarrays verstreute Punkte aus: m[rows, cols] greift auf das Element jedes (row, col)-Paars zu, nicht auf eine ganze Teilmatrix.

import numpy as np

m = np.array([[1,  2,  3],
              [4,  5,  6],
              [7,  8,  9]])

# Select elements at (0,2), (1,0), (2,1)
rows = [0, 1, 2]
cols = [2, 0, 1]
print(m[rows, cols])  # [3 4 8]

np.ix_ zur Auswahl eines Zeilen-Spalten-Rasters

np.ix_ wählt für jede Kombination der von Ihnen angegebenen Zeilen und Spalten eine Teilmatrix aus – praktisch, wenn Sie viele Zeilen UND viele Spalten benötigen, nicht nur Paare.

import numpy as np

m = np.arange(16).reshape(4, 4)
print(m)

# Select rows 0,2 and columns 1,3
ix = np.ix_([0, 2], [1, 3])
print(m[ix])
# [[ 1  3]
#  [ 9 11]]

np.nonzero() und np.argwhere()

np.nonzero gibt die Indizes von Elementen ungleich null (oder True) als Tupel pro Achse zurück. np.argwhere liefert dieselben Informationen als übersichtlich angeordnete Zeilen.

import numpy as np

a = np.array([0, 3, 0, 5, 0, 7])
print(np.nonzero(a))       # (array([1, 3, 5]),)
print(np.argwhere(a > 0))  # [[1] [3] [5]]

Boolesche und Fancy-Indizierung kombinieren

Kombinieren Sie beide Methoden: Verwenden Sie eine boolesche Maske, um Zeilen zu filtern, und anschließend Fancy-Indizierung, um Spalten neu anzuordnen. Zusammen filtern und ordnen sie Daten in einem klaren Schritt neu an.

import numpy as np

data = np.array([[1, 2, 3],
                 [4, 5, 6],
                 [7, 8, 9]])
scores = np.array([0.9, 0.3, 0.8])

# Keep high-scoring rows, reorder columns to [2, 0, 1]
high = data[scores > 0.5]
reordered = high[:, [2, 0, 1]]
print(reordered)

Leistung: Boolesche versus Fancy-Indizierung

Sowohl boolesche als auch Fancy-Indizierung liefern Kopien. Zum Filtern ist eine boolesche Maske meist am verständlichsten und zudem schnell genug – eine hervorragende Standardwahl.

import numpy as np

a = np.random.rand(1_000_000)

# Boolean mask -- readable and fast
result = a[a > 0.5]
print('filtered size:', result.size)  # ~500000

# Equivalent with np.where + fancy index
idx = np.where(a > 0.5)[0]
result2 = a[idx]
print('same result:', np.array_equal(result, result2))

Schnelltest

Testen Sie Ihr Verständnis der booleschen Maskierung und Fancy-Indizierung aus dieser Lektion.

Zusammenfassung der Lektion

Gut gemacht! Boolesche Masken filtern und kopieren, np.where behält die Form des Arrays bei, und Fancy-Indizierung greift auf beliebige von Ihnen angegebene Elemente zu. Als Nächstes: Pandas Series!

Kostenlos starten

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 „Boolesche Maskierung und Fancy Indexing“ kostenlos?

Ja — der vollständige Text von „Boolesche Maskierung und Fancy Indexing“ 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 „Boolesche Maskierung und Fancy Indexing“?

Filtern Sie Arrays mit booleschen Bedingungen und wählen Sie beliebige Elemente mithilfe von Integer-Indexarrays aus. 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 4 von 4.

Wie lange dauert die Lektion „Boolesche Maskierung und Fancy Indexing“?

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

  1. Universelle Funktionen (ufuncs)
  2. Aggregationsfunktionen
  3. Broadcasting-Regeln
  4. Boolesche Maskierung und Fancy Indexing
← Zurück zu Pandas & NumPy Academy