Einstieg in pandas

Lerne, mit pandas Datentabellen in Python zu bearbeiten. Erstelle Series und DataFrames, lade eine CSV-Datei und prüfe die eingelesenen Daten. Wähle mit loc anhand von Bezeichnungen und mit iloc anhand von Positionen genau die Zeilen und Spalten aus, die du brauchst. Filtere Zeilen nach Bedingungen, füge Spalten hinzu und transformiere sie, sortiere Werte und weise ihnen Ränge zu. Fasse Daten mit deskriptiven Kennwerten, absoluten Häufigkeiten und Korrelation zusammen. Die Beispiele basieren auf pandas 3.

MittelEinheit 2 von 8 in Kurs: Datenanalyse mit Python – NumPy, pandas und Matplotlib

Was du lernst

  1. Beschreibe, wie pandas ein- und zweidimensionale Daten mit Bezeichnungen speichert, erstelle Series und DataFrames aus Python-Daten und verwalte ihre Zeilen- und Spaltenbezeichnungen.
    • Eine Series erstellen und ihren Index nutzen
      Erstelle eine Series aus einer Liste oder einem Dictionary, lies ihre Werte, ihren Index, ihren Datentyp und ihren Namen aus und sage voraus, wie sich Bezeichnungen bei Arithmetik und beim Nachschlagen verhalten.
    • Einen DataFrame erstellen und seinen Aufbau verstehen
      Erstelle einen DataFrame aus Python-Daten, lies seine Form, Spalten, seinen Index und seine Datentypen aus, wähle eine Spalte als Series aus und verwende das Argument axis richtig.
    • Bezeichnungen festlegen, zurücksetzen, umbenennen und entfernen
      Wähle einen aussagekräftigen Zeilenindex, verschiebe ihn zurück in eine Spalte, benenne Zeilen oder Spalten um oder entferne sie und behalte die Ergebnisse durch erneute Zuweisung.
  2. Lies eine CSV-Datei mit den passenden Optionen in einen DataFrame ein, untersuche das Ergebnis systematisch und wandle Spalten in die Datentypen um, die du für die Analyse brauchst.
    • Eine CSV-Datei mit read_csv einlesen
      Lade eine kommagetrennte Datei mit pd.read_csv, verstehe, wie pandas Spaltentypen ermittelt, und verwende die Optionen für Trennzeichen, Dezimalzeichen, Kopfzeilen, fehlende Werte und Kennungen.
    • Einen neuen DataFrame untersuchen
      Prüfe eine frisch geladene Tabelle vor der Analyse mit head, info, shape, dtypes, der Anzahl fehlender Werte und der Anzahl unterschiedlicher Werte.
    • Spalten in die passenden Datentypen umwandeln
      Ändere den Datentyp einer Spalte mit astype, pd.to_numeric und pd.to_datetime und behalte die umgewandelte Spalte durch erneute Zuweisung.
  3. Wähle mit loc anhand von Bezeichnungen und mit iloc anhand von Positionen genau die Zeilen, Spalten und Einzelwerte aus, die du brauchst, und sage Form und Typ jedes Ergebnisses voraus.
    • Zeilen und Spalten mit loc nach ihren Bezeichnungen auswählen
      Verwende df.loc[rows, columns] mit einzelnen Bezeichnungen, Listen, Slices einschließlich beider Endpunkte und booleschen Masken und erkenne, wenn eine Bezeichnung nicht existiert.
    • Mit iloc nach Position auswählen und den passenden Indexer wählen
      Verwende df.iloc[rows, columns] mit ganzzahligen Positionen, Slices ohne Endpunkt und negativen Positionen, lies Einzelwerte mit at und iat aus und entscheide zwischen der Auswahl nach Bezeichnung und nach Position.
  4. Behalte nur die Zeilen, die eine oder mehrere Bedingungen erfüllen. Verwende dazu boolesche Masken, Hilfsmethoden für häufige Tests und query und ändere Werte in ausgewählten Zeilen sicher.
    • Mit booleschen Masken filtern
      Erstelle aus einem Vergleich eine True/False-Maske, verknüpfe Bedingungen mit &, | und ~, zähle Treffer und verstehe, wie sich fehlende Werte bei Vergleichen verhalten.
    • Hilfsmethoden und query für häufige Filteraufgaben nutzen
      Filtere mit isin, between, isna/notna und str.contains und schreibe dieselben Bedingungen als lesbare query-Zeichenkette.
    • Werte in ausgewählten Zeilen sicher ändern
      Aktualisiere Werte in Zeilen, die eine Bedingung erfüllen, mit einer einzigen loc-Zuweisung und vermeide verkettete Zuweisungen, die in pandas 3 die ursprüngliche Tabelle nicht ändern.
  5. Erstelle mit vektorisierter Arithmetik und assign neue Spalten aus vorhandenen und kodiere oder transformiere Werte mit np.where, map, apply und replace.
    • Neue Spalten aus vorhandenen Spalten berechnen
      Füge mit vektorisierter Arithmetik eine Spalte hinzu oder überschreibe sie, erstelle mit assign Spalten in einer Methodenkette und sage voraus, wie sich fehlende Werte und die Ausrichtung anhand von Indexbezeichnungen auf das Ergebnis auswirken.
    • Werte mit np.where, map und apply umkodieren und transformieren
      Wandle Bedingungen mit np.where in Bezeichnungen um, ordne Werte mit map und replace zu, wende mit apply eigene Funktionen an und bevorzuge vektorisierte Formen, wo sie existieren.
  6. Ordne Zeilen nach einer oder mehreren Spalten, weise Werten mit einer passenden Regel für Rangbindungen Ränge zu, berechne deskriptive Kennwerte für numerische und Textspalten und ermittle Häufigkeiten und Zusammenhänge.
    • Zeilen nach Werten oder nach dem Index sortieren
      Sortiere einen DataFrame nach einer oder mehreren Spalten in beide Richtungen, lege die Platzierung fehlender Werte und die Reihenfolge bei Rangbindungen fest und finde die obersten oder untersten Zeilen.
    • Werten Ränge zuweisen und Rangbindungen berücksichtigen
      Weise jedem Wert mit rank seinen Rang zu, wähle eine zum Zweck passende Methode für Rangbindungen und drücke Ränge als relative Ränge aus.
    • Spalten mit deskriptiven Kennwerten zusammenfassen
      Berechne Anzahl, Summe, Lagemaße, Streuung und Quartile mit pandas-Methoden und describe, interpretiere sie und berücksichtige fehlende Werte und Textspalten richtig.
    • Werte zählen und Zusammenhänge messen
      Zähle, wie häufig jeder Wert vorkommt, führe unterschiedliche Werte auf, drücke Häufigkeiten als Anteile aus und miss den linearen Zusammenhang zwischen zwei numerischen Spalten mit Korrelation.

Einstieg in pandas einfach erklärt

6 Kapitel

1

Series und DataFrames verstehen

Bezeichnungen machen aus einer Zahlenfolge Daten, die du identifizieren und kombinieren kannst. Erstelle eine Series für eine Variable und einen DataFrame für mehrere Variablen und lies dann ihre Dimensionen und Datentypen aus. Du erfährst, warum die Zuordnung anhand von Bezeichnungen bei der Arithmetik wichtig ist, wie sich eine Spalte von einer Tabelle mit einer Spalte unterscheidet und wie das Auswählen, Zurücksetzen oder Umbenennen eines Index spätere Abfragen verändert. Diese Strukturen bilden die Grundlage für alle folgenden Auswahlen und Berechnungen.

1.1 Eine Series erstellen und ihren Index nutzen

Eine Series hält eine Folge von Werten zusammen mit Bezeichnungen fest. Diese Bezeichnungen geben den Werten Bedeutung: Eine Niederschlagsmessung gehört zu einem Tag und eine Bevölkerungszahl zu einer Stadt. Importiere pandas und NumPy unter ihren üblichen Kurznamen.

import pandas as pd
import numpy as np
rain = pd.Series([4.5, 3.0, 6.2],
                 index=["Mon", "Tue", "Wed"], name="rain_mm")
Werte und Bezeichnungen auslesen

Die Werte sind 4.5, 3.0 und 6.2; der Index lautet Mon, Tue und Wed. Ohne index= vergibt pandas die Bezeichnungen 0, 1 und 2. Ein Dictionary liefert beides zugleich: pd.Series({"Lima": 10, "Oslo": 5, "Pune": 7}) übernimmt die Bezeichnungen von den Schlüsseln in deren Reihenfolge im Dictionary.

Attribute beschreiben die Series ohne Klammern: rain.index enthält die Bezeichnungen, rain.dtype ist float64, rain.name ist "rain_mm" und rain.size ist 3. Verwende rain.to_numpy(), wenn ein NumPy-Array benötigt wird. Das ältere .values gibt je nach Datentyp unterschiedliche Arten von Arrays zurück; bei Textdaten kann es ein pandas-Array liefern.

Ein Datentyp gibt pandas an, welche Art von Werten gespeichert wird. Häufige Typen sind int64 für ganze Zahlen, float64 für Dezimalzahlen, bool für True/False, str für Text und datetime64 für Datums- und Zeitangaben. pandas 3 ermittelt für Text den Typ str; ältere Beispiele zeigen oft object.

Mit der ganzen Series arbeiten

Für s = pd.Series([10, 20, 30], index=["a", "b", "c"]) erzeugt s * 2 die Werte 20, 40 und 60. s > 15 erzeugt False, True und True. Beide behalten die Bezeichnungen bei. Diese Operationen sind vektorisiert: Ein Ausdruck bearbeitet die ganze Series ohne Python-Schleife.

Schlage eine Bezeichnung mit s["b"] nach; das ergibt 20. Schlage eine Position mit s.iloc[0] nach; das ergibt 10. Der Ausdruck "b" in s prüft den Index; 20 in s ist False. Auch eine Ganzzahl in eckigen Klammern ist eine Bezeichnung: Beim Index [2, 0, 1] meint s[0] die Bezeichnung 0 und nicht den ersten Eintrag. Bei Textbezeichnungen löst s[0] in pandas 3 einen KeyError aus.

Bezeichnungen bei der Arithmetik zuordnen
a = pd.Series([1, 2, 3], index=["x", "y", "z"])
b = pd.Series([10, 20, 30], index=["y", "z", "w"])
a + b

Die gemeinsame Bezeichnung y verbindet 2 und 10 zu 12.0; z verbindet 3 und 20 zu 23.0. Die Bezeichnungen w und x kommen nur in einer Eingabe vor und erhalten daher NaN. Das Ergebnis enthält alle vier Bezeichnungen. Eine Addition nach der sichtbaren Zeilenposition würde fälschlich 11, 22 und 33 ergeben.

Verwende a.add(b, fill_value=0), wenn ein fehlender Wert als null zählen soll. Die Ergebnisse sind w 30.0, x 1.0, y 12.0 und z 23.0. Verwandte Methoden sind sub, mul und div.

Fehlende Werte erkennen

Ein fehlender Gleitkomma- oder str-Wert verwendet NaN; ein fehlender Datums- und Zeitwert verwendet NaT; eine fehlende Ganzzahl mit Fehlwertunterstützung verwendet <NA>. pd.Series([1, None, 3]) wird zu float64 und zeigt 1.0, NaN und 3.0 an, weil das gewöhnliche int64 kein NaN aufnehmen kann.

Wichtige Erkenntnisse

  • Eine Series verbindet eine Folge von Werten mit einem Index, einem Datentyp und einem optionalen Namen.
  • Verwende zum Nachschlagen eine Bezeichnung und für eine Position iloc; Zugehörigkeitstests prüfen die Bezeichnungen.
  • Vektorisierte Arithmetik wirkt auf jeden Wert und behält den Index bei.
  • Zwei Series werden anhand ihrer Bezeichnungen ausgerichtet; Bezeichnungen ohne Gegenstück erhalten fehlende Ergebnisse, sofern kein Füllwert angegeben wird.
  • Fehlwertkennzeichen hängen vom Datentyp ab: NaN, NaT oder <NA>.

1.2 Einen DataFrame erstellen und seinen Aufbau verstehen

Ein DataFrame ist eine zweidimensionale Tabelle. Jede Zeile erfasst eine Beobachtung, etwa eine Bestellung; jede Spalte enthält eine Variable, etwa eine Menge. Spalten können unterschiedliche Datentypen haben, teilen sich aber denselben Zeilenindex.

Eine Tabelle aus Python-Daten erstellen
df = pd.DataFrame({
    "product": ["Notebook", "Desk lamp", "Pen set", "Mug"],
    "quantity": [3, 1, 2, 4],
    "unit_price": [2.50, 18.00, 4.75, 6.00]
})

Jeder Dictionary-Schlüssel wird zu einem Spaltennamen; jede Liste liefert die Werte dieser Spalte. Die Listen müssen gleich lang sein, damit jede Zeile in jeder Spalte einen Platz hat. Hier lauten die Indexbezeichnungen 0 bis 3. Unterschiedlich lange Listen lösen einen ValueError aus.

Eine Liste von Dictionaries liefert dagegen ein Dictionary pro Zeile. pd.DataFrame([{"a": 1, "b": 2}, {"a": 3, "c": 4}]) erstellt die Spalten a, b und c. Das fehlende b in der zweiten Zeile und das fehlende c in der ersten werden zu NaN, sodass diese Spalten float64 verwenden. Auch ein zweidimensionales NumPy-Array kann Werte liefern; columns=[...] benennt dabei die Spalten.

Die Dimensionen der Tabelle auslesen

df.shape ist (4, 3): vier Zeilen und drei Spalten, in dieser Reihenfolge. len(df) ist 4, während df.size gleich 12 ist, weil es Zellen zählt. df.index enthält Zeilenbezeichnungen, df.columns enthält Spaltenbezeichnungen und df.dtypes gibt einen Datentyp pro Spalte aus. Dies sind Attribute: df.shape() versucht, ein Tupel aufzurufen, und löst einen TypeError aus. df.T vertauscht Zeilen und Spalten.

Eine Series oder eine Tabelle erhalten
AuswahlErgebnis
df["quantity"]Eine Series
df[["quantity"]]Ein DataFrame mit einer Spalte
df[["product", "unit_price"]]Ein DataFrame mit zwei Spalten in dieser Reihenfolge

Die innere Liste fordert eine Sammlung von Spalten an. Ohne sie übergibt df["product", "unit_price"] einen einzelnen Tupelschlüssel, der keinem der gewöhnlichen Spaltennamen entspricht, und löst einen KeyError aus.

Eckige Klammern funktionieren auch, wenn Namen Leerzeichen enthalten oder mit Methoden kollidieren. Die Punktschreibweise wie df.quantity funktioniert nur bei geeigneten Namen. Eine Spalte namens size benötigt df["size"], weil df.size die Zellenanzahl der Tabelle bezeichnet. Erstelle Spalten ebenfalls mit eckigen Klammern: df["total"] = 5 fügt eine Spalte hinzu, df.total = 5 hingegen nicht.

Eine Achse wählen

Für numbers = pd.DataFrame({"a": [1, 2], "b": [3, 4]}) addiert numbers.sum() entlang der Zeilen und ergibt a 3 und b 7. Dies ist axis=0, auch "index" genannt. numbers.sum(axis=1) addiert über jede Zeile hinweg und ergibt 4 und 6; diese Achse heißt auch "columns". Benenne zuerst das benötigte Ergebnis: eine Summe pro Spalte oder eine Summe pro Zeile.

Die Auswahl einer Zeile erzeugt eine Series, deren Bezeichnungen die Spaltennamen sind. Diese Series benötigt einen Datentyp, der jede Zelle der Zeile aufnehmen kann. Eine Zeile mit Ganz- und Gleitkommazahlen wird zu float64; eine Zeile mit Text und Zahlen wird zu object. Die ursprünglichen Spalten behalten ihre jeweiligen Datentypen.

Wichtige Erkenntnisse

  • Ein DataFrame hat einen gemeinsamen Zeilenindex und einen Datentyp pro Spalte.
  • Gleich lange Listen liefern Spalten; eine Liste von Dictionaries liefert Zeilen.
  • shape zählt Zeilen und Spalten; size zählt Zellen.
  • Ein einzelner Spaltenname gibt eine Series zurück; eine Liste von Namen gibt einen DataFrame zurück.
  • axis=0 reduziert entlang der Zeilen; axis=1 reduziert entlang der Spalten.
  • Verwende eckige Klammern für Spaltennamen, die mit Attributen oder Methoden kollidieren.

1.3 Bezeichnungen festlegen, zurücksetzen, umbenennen und entfernen

Zeilenbezeichnungen können eine Bedeutung tragen, etwa eine Bestellnummer, oder einfach die aktuellen Zeilen bezeichnen. Ein nützlicher Index macht Abfragen und spätere Ergebnisse leichter interpretierbar. Das Ändern von Bezeichnungen gibt eine neue Tabelle zurück; behalte das Ergebnis daher durch eine Zuweisung.

Eine ID in den Index verschieben
orders = pd.DataFrame({
    "order_id": [1001, 1002, 1003],
    "product": ["Notebook", "Desk lamp", "Pen set"],
    "unit_price": [2.50, 18.00, 4.75]
})
orders_by_id = orders.set_index("order_id")

Die ursprüngliche Tabelle hat einen standardmäßigen RangeIndex: 0, 1 und 2. Die neue Tabelle hat die Bezeichnungen 1001, 1002 und 1003. order_id wurde aus den Spalten in den Index verschoben. orders_by_id.loc[1002] identifiziert nun die Zeile mit Desk lamp anhand ihrer ID.

Der Aufruf orders.set_index("order_id") ohne Speichern des Ergebnisses lässt orders unverändert. Eine erneute Zuweisung wie orders = orders.set_index("order_id") behält die neue Struktur. In pandas 3.1 ist inplace= für diese Methoden zum Ändern von Bezeichnungen und für das Sortieren veraltet; verwende eine Zuweisung.

Bezeichnungen zurück in eine Spalte verschieben

orders_by_id.reset_index() stellt order_id als gewöhnliche Spalte wieder her und erstellt einen neuen RangeIndex. Ein unbenannter Index wird zu einer Spalte namens index. So bleibt die alte Zeilenidentität erhalten.

reset_index(drop=True) verwirft die alten Bezeichnungen. Bei einem Index [10, 20, 30] behält das einfache reset_index() diese Zahlen in einer Spalte index; reset_index(drop=True) verwirft sie und verwendet 0, 1 und 2. Entscheide nach dem Filtern oder Sortieren, ob die alten Bezeichnungen nützlich sind, bevor du sie verwirfst. Die Neunummerierung des Index ändert weder die Datenwerte noch macht sie eine Sortierung rückgängig.

Bezeichnungen umbenennen oder entfernen
renamed = orders.rename(columns={"unit_price": "price"})
short = orders.drop(columns=["product"])
remaining = orders.drop(index=[0, 1])

rename ordnet alten Bezeichnungen neue zu und behält nicht aufgeführte Namen bei. Standardmäßig wird ein falsch geschriebener alter Name ignoriert. Untersuche daher .columns, wenn eine Umbenennung nichts bewirkt zu haben scheint. Um jeden Spaltennamen zu ersetzen, weise orders.columns eine vollständige Liste zu; ihre Länge muss der Spaltenanzahl entsprechen.

drop(columns=...) entfernt Spalten; drop(index=...) entfernt Zeilen anhand ihrer Bezeichnung. Eine fehlende Bezeichnung löst einen KeyError aus. Nach dem Sortieren ist die Bezeichnung 0 möglicherweise nicht mehr die erste Zeile: Ihr Entfernen löscht weiterhin die Zeile mit der Bezeichnung 0.

Wähle eine Liste aus, um die Spaltenreihenfolge festzulegen: orders = orders[["order_id", "unit_price", "product"]]. Spalten, die in dieser Liste fehlen, werden aus dem Ergebnis entfernt.

Prüfen, ob eine ID wirklich eine Zeile identifiziert

Indexbezeichnungen können mehrfach vorkommen. Prüfe orders_by_id.index.is_unique, bevor du sie als eindeutige IDs behandelst. Kommt die Bezeichnung 1002 zweimal vor, gibt .loc[1002] beide Zeilen als DataFrame zurück. Bei eindeutigen Bezeichnungen gibt dieselbe Abfrage mit einer einzelnen Bezeichnung eine Series zurück.

Ein aussagekräftiger Index verbessert auch Zusammenfassungen. In einer Wettertabelle mit Tagen als Index gibt weather["temp_c"].idxmax() einen Tag wie "Thu" aus; bei einem Standardindex gibt es eine Zeilennummer aus.

Wichtige Erkenntnisse

  • set_index verschiebt eine Spalte in die Zeilenbezeichnungen; reset_index verschiebt Bezeichnungen zurück in eine Spalte.
  • reset_index(drop=True) verwirft alte Bezeichnungen.
  • Behalte Änderungen an Bezeichnungen, indem du die zurückgegebene Tabelle zuweist.
  • rename ändert angegebene Bezeichnungen; drop entfernt Zeilen oder Spalten anhand ihrer Bezeichnung.
  • Ein Index kann Dubletten enthalten; prüfe die Eindeutigkeit, bevor du ihn als ID verwendest.
2

Eine CSV-Datei laden und die eingelesenen Daten prüfen

Eine geladene Tabelle muss geprüft werden, bevor ihre Zahlen als Grundlage einer Analyse dienen können. Stimme die CSV-Optionen auf Trennzeichen, Kopfzeile und Wertkonventionen der Datei ab und prüfe dann, ob das Ergebnis die erwarteten Zeilen, Namen und Datentypen enthält. Untersuche fehlende Einträge und wiederholte IDs und wandle bei Bedarf Zahlen- oder Datumstext um. Kleine Entscheidungen beim Import sind wichtig: Eine verlorene führende Null oder ein nicht umgewandeltes Datum kann die Bedeutung späteren Codes verändern.

2.1 Eine CSV-Datei mit read_csv einlesen

Eine CSV-Datei speichert eine Tabelle als Text: Datensätze stehen in Zeilen und ein Trennzeichen trennt die Felder. Die erste Zeile enthält oft Spaltennamen. Um die Datei richtig zu laden, musst du sowohl ihren Aufbau als auch die Bedeutung ihrer Werte erkennen.

Die Bestelltabelle laden
orders = pd.read_csv("orders.csv")

Ein relativer Pfad wird vom aktuellen Arbeitsverzeichnis von Python aus aufgelöst. Ein falscher Speicherort löst einen FileNotFoundError aus. Auch ein absoluter Pfad oder eine URL kann an read_csv übergeben werden.

Die Beispiele verwenden diese Datei. Die letzte Zeile hat ein leeres Mengenfeld.

order_id,date,product,category,quantity,unit_price
1001,2026-03-02,Notebook,Stationery,3,2.50
1002,2026-03-02,Desk lamp,Home,1,18.00
1003,2026-03-03,Pen set,Stationery,2,4.75
1004,2026-03-04,Mug,Home,4,6.00
1005,2026-03-04,Backpack,Bags,1,35.00
1006,2026-03-05,Notebook,Stationery,,2.50

Mit den Standardeinstellungen hat das Ergebnis die Form (6, 6) und die Indexbezeichnungen 0 bis 5. pandas ermittelt die Datentypen: order_id ist int64, unit_price ist float64, und auch quantity wird zu float64, weil das leere Feld zu NaN wird. Die anderen Spalten einschließlich date sind str. Eine wie ein Datum aussehende Zeichenkette bleibt Text, bis sie umgewandelt wird.

Den Aufbau der Datei berücksichtigen
Merkmal der DateiOption zum Einlesen
Felder durch Semikolons getrenntsep=";"
Dezimalkommasdecimal=","
Keine Kopfzeileheader=None, names=["id", "product"]
Zwei zusätzliche Zeilen vor der Kopfzeileskiprows=2
Nur ausgewählte Felder benötigtusecols=["product", "quantity"]
Eine kurze Vorschaunrows=100

Verwende für eine Datei mit den Zeilen a;b, 1,5;2 und 3,0;4 den Aufruf pd.read_csv("file.csv", sep=";", decimal=","). Spalte a enthält dann 1.5 und 3.0. Das Standardtrennzeichen Komma erzeugt eine Spalte namens a;b: ein Hinweis darauf, das Trennzeichen zu prüfen.

index_col="order_id" macht diese Spalte beim Laden zum Zeilenindex. thousands="," liest ein Feld wie "1,200" als 1200 ein; in einer kommagetrennten Datei muss das Feld durch CSV-Anführungszeichen maskiert werden, damit sein internes Komma nicht als weiteres Trennzeichen gilt.

Bei der Typinferenz die Bedeutung erhalten

Codes wie "001" sind Kennungen und keine Mengen. dtype={"id": str} erhält ihre führenden Nullen. Wandelt pandas sie zuerst in 1 um, kann eine Rückumwandlung dieser Zahl in Text nicht wiederherstellen, wie viele Nullen die Datei enthielt.

Leere Felder und gängige Kennzeichen wie NA, N/A, NULL, NaN und None gelten standardmäßig als fehlend. Ergänze ein besonderes Kennzeichen der Datei mit na_values=["-"]. Dies sind Regeln für das Laden. Prüfe daher die Konventionen der Datei, wenn ein Code wie ein Fehlwertkennzeichen aussieht.

Verwende parse_dates=["date"], um die Beispieldaten als Datums- und Zeitwerte einzulesen. In pandas 3 verwenden diese Daten eine Auflösung in Mikrosekunden, datetime64[us]. UTF-8 ist die Standardzeichenkodierung. Ein UnicodeDecodeError ist ein Anlass, die Kodierung der Datei zu prüfen und die passende Option anzugeben, etwa encoding="latin-1".

Wichtige Erkenntnisse

  • read_csv gibt einen DataFrame zurück und ermittelt die Spaltentypen.
  • Stimme sep, decimal und die Kopfzeilenoptionen auf den Dateiaufbau ab.
  • Erhalte führende Nullen in Kennungen, indem du beim Laden einen Textdatentyp verwendest.
  • Leere Felder und gängige Fehlwertkennzeichen werden zu fehlenden Werten; na_values ergänzt Kennzeichen.
  • Datumsangaben müssen umgewandelt werden, entweder beim Laden mit parse_dates oder später.
  • Ein relativer Pfad wird vom aktuellen Arbeitsverzeichnis aus aufgelöst.

2.2 Einen neuen DataFrame untersuchen

Ein erfolgreicher Lesevorgang bedeutet, dass pandas die Datei einlesen konnte. Er belegt nicht, dass Spalten, Datentypen und fehlende Werte zu dem passen, was die Tabelle darstellen soll. Untersuche den neuen DataFrame, bevor du damit rechnest.

Sichtbare Zeilen und Dimensionen prüfen
orders.head(3)
orders.tail()
orders.shape
orders.columns.tolist()

head() zeigt standardmäßig fünf Zeilen; head(3) zeigt drei. tail() prüft das Ende, an dem ein Export andere Datensätze enthalten kann. sample(3, random_state=0) liefert eine reproduzierbare Zufallsstichprobe aus drei Zeilen. In einem Notebook wird der letzte Ausdruck einer Zelle automatisch angezeigt; verwende andernorts print.

Die Bestelldatei sollte sechs Zeilen und sechs Spalten enthalten. Eine Vorschau sollte benannte Spalten und die erste Bestellung als Daten zeigen. Erscheint der erste Datensatz unter den Spaltennamen, fehlt der Datei wahrscheinlich eine Kopfzeile und sie benötigt header=None. Steht alles in einer einzigen breiten Spalte, prüfe sep.

Spaltennamen müssen genau übereinstimmen, einschließlich Groß- und Kleinschreibung und Leerzeichen. orders["Product"] schlägt fehl, wenn der Name product lautet. Durch die Untersuchung der Liste lassen sich angehängte Leerzeichen leichter erkennen. orders.columns = orders.columns.str.strip() entfernt Leerzeichen an den Enden der Kopfzeilennamen.

Den Aufbau mit info auslesen

orders.info() gibt den Indexbereich, den Namen jeder Spalte, die Anzahl vorhandener Werte, den Datentyp und den Speicherbedarf aus. Im Beispiel mit sechs Zeilen hat quantity fünf nicht fehlende Werte; die anderen Spalten haben jeweils sechs. Die Datentypen umfassen zwei Gleitkommaspalten, eine Ganzzahlspalte und drei str-Spalten. orders.dtypes liefert eine kompakte Typenliste.

Eine numerisch aussehende Spalte mit dem Datentyp str solltest du untersuchen: Ein Eintrag wie "unknown", eine Einheit wie "12 kg" oder ein nicht berücksichtigtes Tausendertrennzeichen kann die Erkennung als numerischer Typ verhindern. Auch Datumsangaben bleiben Text, sofern sie nicht umgewandelt werden. Entscheide anhand der Bedeutung der Spalte über den benötigten Typ, nicht allein anhand ihres Aussehens in einer Vorschau.

Lücken und wiederholte Werte zählen
orders.isna().sum()
orders.isna().any(axis=1).sum()
orders.nunique()

isna() erstellt eine boolesche Tabelle: True markiert eine fehlende Zelle. Die Summe entlang jeder Spalte zählt diese Zellen. Quantity hat einen fehlenden Wert und jede andere Spalte null. Um betroffene Zeilen zu zählen, prüft .any(axis=1) zunächst, ob jede Zeile irgendeine Lücke hat; anschließend zählt .sum() diese Zeilen. Würdest du stattdessen alle Spaltenanzahlen addieren, könnte eine Zeile mehrfach gezählt werden.

nunique() zählt unterschiedliche vorhandene Werte: Die Bestellungen haben sechs IDs, vier Daten, fünf Produkte, drei Kategorien, vier Mengen und fünf Preise. Vergleiche die Anzahl der IDs mit der Zeilenanzahl, um die Eindeutigkeit zu prüfen, und berücksichtige dabei auch die Anzahl fehlender IDs. orders.duplicated(subset="product") markiert die zweite Notebook-Zeile mit der Bezeichnung 5 als Wiederholung. Ein wiederholtes Produkt ist hier zulässig; eine wiederholte Bestell-ID müsste untersucht werden.

Einen schnellen numerischen Überblick auslesen

orders.describe() gibt Anzahl, arithmetisches Mittel, Standardabweichung, Minimum, Quartile und Maximum für numerische Spalten aus. Die Anzahl von quantity ist fünf, sodass ihr arithmetisches Mittel fünf erfasste Mengen zusammenfasst. Prüfe neben den Datentypen auch plausible Wertebereiche und Einheiten: Eine Spalte kann numerisch sein und dennoch einen Eingabefehler enthalten. Halte bei der Prüfung neu geladener Daten die festgestellte Zeilenanzahl, Spaltenanzahl, die Datentypen, die Anzahlen fehlender Werte und die ID-Prüfung zusammen fest.

Wichtige Erkenntnisse

  • Nutze nach dem Laden Vorschauen, Dimensionen, genaue Spaltennamen und Datentypen gemeinsam.
  • info() gibt die Anzahl nicht fehlender Werte und die Datentypen aus; es gibt keine Zusammenfassungstabelle zurück.
  • isna().sum() zählt fehlende Zellen pro Spalte; .any(axis=1).sum() zählt betroffene Zeilen.
  • Prüfe sowohl fehlende IDs als auch die Anzahl unterschiedlicher IDs.
  • Die Anzahlen von describe() zeigen, auf wie vielen erfassten Werten eine numerische Zusammenfassung beruht.

2.3 Spalten in die passenden Datentypen umwandeln

Der Datentyp einer Spalte bestimmt, welche Operationen sinnvoll sind. Eine Textspalte mit "12" speichert weiterhin Text; ihr arithmetisches Mittel lässt sich nicht wie bei einer numerischen Spalte berechnen. Wandle bewusst um und weise das Ergebnis der Tabelle wieder zu.

Strikte Umwandlung oder Typumwandlung mit Fehlerersetzung wählen

astype wandelt eine Series in einen angegebenen Typ um, etwa int, float, str oder "Int64". Die Umwandlung schlägt fehl, wenn ein Wert im gewünschten Typ nicht dargestellt werden kann.

raw = pd.Series(["12", "7", "n/a", "3.5"])
numeric = pd.to_numeric(raw, errors="coerce")

raw.astype(float) löst bei "n/a" einen ValueError aus. Mit errors="coerce" lauten die Ausgabewerte 12.0, 7.0, NaN und 3.5. Der nicht umwandelbare Eintrag wird zu einem fehlenden Wert, statt die Umwandlung zu stoppen. Vergleiche raw.isna().sum() mit numeric.isna().sum(): Aus null fehlenden Werten wurde einer, womit ein zu prüfender Wert sichtbar wird.

Die Fehlerersetzung ist eine Umwandlungsregel und kein Beleg dafür, dass jede neue Lücke harmlos ist. Nutze die Anzahlen vor und nach der Umwandlung, um Verluste zu finden. Speichere die Umwandlung in einer neuen Variablen oder Spalte, wenn der Rohtext nützlich ist, um einen nicht umgewandelten Wert zurückzuverfolgen.

Fehlende ganze Zahlen erhalten

Die Bestellspalte quantity enthält ganze Zahlen und ein NaN, daher ist sie float64. Das einfache astype(int) schlägt fehl, weil NaN keine gewöhnliche Ganzzahldarstellung hat.

orders["quantity"] = orders["quantity"].astype("Int64")

Das große I ist entscheidend: Int64 mit Fehlwertunterstützung behält die Lücke als <NA>, während es die bekannten Werte als ganze Zahlen speichert. Diese Wahl passt zu Anzahlen mit fehlenden Einträgen. Sie macht eine tatsächlich gebrochene Mengenangabe nicht zu einer gültigen ganzzahligen Anzahl.

Auch Tausendertrennzeichen in Text müssen behandelt werden. pd.Series(["1,200", "950"]).str.replace(",", "").astype(int) ergibt 1200 und 950. Verwendet die Datei selbst diese Konvention, kann thousands="," sie beim Einlesen berücksichtigen.

Datumstext umwandeln
orders["date"] = pd.to_datetime(orders["date"])
orders["date"].dt.day_name()

Die Umwandlung ermöglicht .dt.year, .dt.month, .dt.day und .dt.day_name(). Für die sechs Bestelldaten lauten die Tagesnamen Monday, Monday, Tuesday, Wednesday, Wednesday und Thursday. Der alleinige Aufruf von pd.to_datetime(orders["date"]) erzeugt eine umgewandelte Series, lässt die ursprüngliche Spalte aber als Text bestehen. Erst die Zuweisung behält das Ergebnis.

Wiederholte Kategorien speichern

orders["category"].astype("category") speichert wiederholte Bezeichnungen über eine Menge erlaubter Kategorien. Bei großen Tabellen spart dies meist Speicher. Weise das Ergebnis zu, um es zu behalten, genau wie bei anderen Umwandlungen.

Der kategoriale Datentyp verändert einige Operationen. Seine Kategorien sind standardmäßig ungeordnet, daher lösen min() und max() einen TypeError aus. value_counts() einer kategorialen Spalte führt auch bekannte Kategorien auf, die in einer gefilterten Auswahl fehlen, und gibt für sie die Anzahl null an. Der kategoriale Datentyp ist für wiederholte Bezeichnungen nützlich, verändert aber neben der Speicherung auch das Verhalten.

Wichtige Erkenntnisse

  • astype schlägt bei ungültigen Umwandlungen fehl; to_numeric(errors="coerce") wandelt ungültige Einträge in fehlende Werte um.
  • Vergleiche die Anzahl fehlender Werte vor und nach der Typumwandlung mit Fehlerersetzung.
  • Int64 mit Fehlwertunterstützung speichert ganze Zahlen zusammen mit fehlenden Einträgen.
  • Wandle Datumsangaben mit to_datetime um und lies ihre Bestandteile über .dt aus.
  • Behalte Umwandlungen, indem du ihre Ergebnisse zuweist.
  • Der ungeordnete kategoriale Datentyp speichert wiederholte Bezeichnungen effizient, verändert aber einige Zusammenfassungen.
3

Daten nach Bezeichnung und nach Position auswählen

Eine Zeile lässt sich anhand ihrer Bezeichnung identifizieren oder anhand ihrer aktuellen Position finden. Lerne, diese Wahl mit loc und iloc ausdrücklich zu treffen, gleichzeitig die benötigten Spalten auszuwählen und vorherzusagen, ob eine Auswahl einen Wert, eine Series oder einen DataFrame zurückgibt. Endpunkte von Slices und erhaltene Bezeichnungen erklären viele Fehler, bei denen das Ergebnis um eins abweicht. Die Unterscheidung ist besonders nützlich, nachdem eine Tabelle sortiert oder gefiltert wurde.

3.1 Zeilen und Spalten mit loc nach ihren Bezeichnungen auswählen

Mit Bezeichnungen kannst du eine Zeile oder Spalte anhand ihrer Bedeutung auswählen. Bei loc identifiziert eine Bestellnummer eine Zeile auch dann, wenn die Tabelle sortiert wurde. Die Auswahl besteht aus einem Zeilenteil, gefolgt von einem Spaltenteil: df.loc[rows, columns].

Von einem aussagekräftigen Index ausgehen

Die Bestelldatei hat sechs Zeilen mit den IDs 1001 bis 1006. Erstelle orders_by_id = orders.set_index("order_id"). Die Spalten lauten der Reihe nach date, product, category, quantity und unit_price. Die Zeilenbezeichnungen sind Bestellnummern, nicht die Positionen 0 bis 5.

orders_by_id.loc[1003]
orders_by_id.loc[1004, "product"]

Der erste Ausdruck gibt Bestellung 1003 als Series zurück: date "2026-03-03", product "Pen set", category "Stationery", quantity 2.0 und Preis 4.75. Die Series trägt den Namen 1003. Der zweite Ausdruck gibt eine Zelle zurück: "Mug".

Eine fehlende Bezeichnung löst einen KeyError aus. orders_by_id.loc[0] schlägt fehl: Eine erste Zeile an Position 0 erzeugt keine Bezeichnung 0.

Mehrere Bezeichnungen auswählen
orders_by_id.loc[[1001, 1005], ["product", "unit_price"]]

Listen wählen Bezeichnungen in der angeforderten Reihenfolge aus. Dies ergibt zwei Zeilen und zwei Spalten: Notebook zu 2.5, dann Backpack zu 35.0. Eine Liste erhält ein tabellenförmiges Ergebnis, auch wenn sie nur eine Bezeichnung enthält: .loc[[1003]] ist ein DataFrame mit einer Zeile.

AnforderungForm
Ein Wert.loc[1004, "product"]
Eine vollständige Zeile.loc[1004]
Eine Tabelle mit einer Zeile.loc[[1004]]
Alle Zeilen, eine Spalte.loc[:, "unit_price"]

Ein Doppelpunkt allein bedeutet alle Bezeichnungen entlang dieser Achse. Lässt du die Spaltenauswahl weg, werden ebenfalls alle Spalten angefordert.

Beide Endpunkte eines bezeichnungsbasierten Slice einschließen
orders_by_id.loc[1002:1004, "product":"quantity"]

Bei diesem geordneten Index sind die Zeilen 1002, 1003 und 1004. Der Spalten-Slice schließt product, category und quantity ein. Sowohl die Endbezeichnung der Zeilen als auch die der Spalten ist enthalten, sodass die Form (3, 3) ist. Würdest du hier Pythons übliche Regel anwenden, nach der der Endpunkt ausgeschlossen ist, würdest du eine vorgesehene Zeile und Spalte auslassen.

Bezeichnungen bleiben beim Sortieren erhalten

Ein Standardindex kann den Unterschied zwischen Bezeichnung und Position verbergen. Angenommen, das Sortieren von Punktzahlen ergibt die Zeilenbezeichnungen 3, 0, 2, 1, 4. .loc[0] wählt weiterhin die Bezeichnung 0 aus, nun die zweite angezeigte Zeile. .iloc[0] wählt die oberste angezeigte Zeile mit der Bezeichnung 3. Beim Sortieren wird eine Zeile zusammen mit ihrer Bezeichnung verschoben; der Index wird nicht stillschweigend neu nummeriert.

Eine Bedingung mit der Spaltenauswahl verbinden

Die Zeilenauswahl kann eine boolesche Series sein:

orders.loc[orders["unit_price"] > 5, ["product", "unit_price"]]

Dies behält Desk lamp zu 18.0, Mug zu 6.0 und Backpack zu 35.0 und gibt nur die beiden angeforderten Spalten zurück. Die Maske bestimmt, welche Zeilen die Bedingung erfüllen; die Spaltenliste bestimmt, was angezeigt wird. Dieselbe Form mit zwei Achsen kann Zellen für eine Aktualisierung auswählen, indem die Auswahl auf der linken Seite einer Zuweisung steht.

Wichtige Erkenntnisse

  • loc wählt Zeilenbezeichnungen und Spaltennamen aus.
  • Listen fordern Bezeichnungen in ihrer aufgeführten Reihenfolge an und erhalten auf dieser Achse einen DataFrame.
  • Bezeichnungsbasierte Slices schließen die Endbezeichnung ein; ein Doppelpunkt wählt alle Bezeichnungen aus.
  • Fehlende angeforderte Bezeichnungen lösen einen KeyError aus.
  • Beim Sortieren werden Bezeichnungen mit ihren Zeilen verschoben, sodass sich Bezeichnung 0 und Position 0 unterscheiden können.
  • Eine boolesche Zeilenmaske und Spaltennamen können in einem einzigen loc-Aufruf stehen.

3.2 Mit iloc nach Position auswählen und den passenden Indexer wählen

Verwende iloc, wenn es darauf ankommt, an welcher Stelle eine Zeile oder Spalte steht: die ersten drei Zeilen, die letzte Spalte oder eine bestimmte angezeigte Zelle. Die Auswahl erfolgt über ganzzahlige Positionen, unabhängig von den Indexbezeichnungen.

Bei null anfangen zu zählen

orders.iloc[0] wählt die erste Zeile und orders.iloc[-1] die letzte aus. Eine negative Position zählt vom Ende rückwärts. Zwei Positionen wählen eine Zelle aus: orders.iloc[2, 2] ist "Pen set" in der ursprünglichen Bestelltabelle, in der product an Spaltenposition 2 steht.

Die Tabelle orders_by_id mit geändertem Index hat die Spalten date, product, category, quantity und unit_price. Durch das Verschieben von order_id in den Index haben sich die Spaltenpositionen geändert, sodass product nun an Position 1 steht. Positionsbasierter Code hängt von diesem Aufbau ab.

Vor dem Endpunkt eines Slice aufhören
orders_by_id.iloc[1:3, 0:2]

Ausgewählt werden die Zeilenpositionen 1 und 2 mit den Bestellungen 1002 und 1003. Die Spaltenpositionen sind 0 und 1, also date und product. Position 3 und Spalte 2 sind ausgeschlossen; die Form ist damit (2, 2). Eine ausgelassene Anfangsposition steht für den Beginn des Bereichs, eine ausgelassene Endposition für sein Ende.

Listen fordern bestimmte Positionen an, auch eine Mischung aus positiven und negativen. orders.iloc[[0, -1], [2, 5]] wählt product und unit_price für die erste und letzte Bestellung aus. Beide sind zufällig Notebook zu 2.5.

Die Form des Ergebnisses vorhersagen
AuswahlErgebnis
orders.iloc[0, 2]Ein Wert
orders.iloc[0]Eine Series für eine Zeile
orders.iloc[:, 2]Eine Series für eine Spalte
orders.iloc[[0]]Ein DataFrame mit einer Zeile
orders.iloc[0:1, 2:3]Ein DataFrame mit einer Zeile und einer Spalte

Ein Skalar wählt ein Element entlang einer Achse aus und entfernt diese Dimension. Ein Slice oder eine Liste erhält die Achse, auch wenn nur ein Element ausgewählt wird. Das ist wichtig, wenn die nächste Operation eine Tabelle statt einer Series erwartet.

Das Ende einer Tabelle berücksichtigen

Die Bestelltabelle mit sechs Zeilen hat die gültigen nicht negativen Zeilenpositionen 0 bis 5. orders.iloc[10] löst einen IndexError aus. Ein Slice kann über die Tabelle hinausreichen: orders.iloc[4:100] gibt einfach die letzten zwei Zeilen zurück. Eine einzelne nicht vorhandene Position ist eine ungültige Anforderung eines Elements, während ein Slice einen Bereich beschreibt, der auf die verfügbaren Zeilen begrenzt wird.

Bewusst zwischen Bezeichnungen und Positionen wählen

Für eine einzelne Zelle verwendet at Bezeichnungen und iat Positionen. orders.at[2, "product"] und orders.iat[2, 2] ergeben beide "Pen set", bevor die Zeilen neu angeordnet werden.

Wähle loc, wenn du eine ID oder die Bedeutung einer Spalte kennst. Wähle iloc, wenn die Position selbst wichtig ist. Um die ersten Zeilen mit einem Spaltennamen zu kombinieren, gibt orders.columns.get_loc("quantity") dessen Position 4 zurück, sodass du orders.iloc[0:3, 4] verwenden kannst.

Einfache eckige Klammern können ihre Rolle wechseln: orders["product"] wählt eine Spalte aus, aber orders[2:4] wählt die Zeilenpositionen 2 und 3 als Slice aus. Mit ausdrücklich angegebenem loc und iloc ist diese Wahl leichter zu erkennen.

Wichtige Erkenntnisse

  • iloc verwendet ganzzahlige Positionen ab null; negative Positionen zählen vom Ende.
  • Positionsbasierte Slices schließen ihren Endpunkt aus und können über die verfügbaren Zeilen hinausreichen.
  • Eine einzelne Position außerhalb des gültigen Bereichs löst einen IndexError aus.
  • Skalare Auswahlen entfernen eine Dimension; Listen und Slices erhalten sie.
  • at wählt eine Zelle nach Bezeichnung und iat eine Zelle nach Position aus.
4

Zeilen nach Bedingungen filtern

Mit Bedingungen kannst du dich auf Beobachtungen konzentrieren, die eine Frage beantworten. Erstelle Masken aus Vergleichen, verknüpfe sie und verwende Hilfsmethoden für Kategorien, Wertebereiche, Lücken und Textübereinstimmungen. Aktualisiere anschließend die ursprüngliche Tabelle mit einer einzigen loc-Zuweisung. Filtern und Aktualisieren verwenden beide eine Zeilenbedingung, aber unter Copy-on-Write von pandas 3 ist es entscheidend, im Blick zu behalten, welche Tabelle geändert wird.

4.1 Mit booleschen Masken filtern

Beim Filtern wählst du Beobachtungen aus, die eine Frage beantworten, etwa welche Bestellungen zu Home gehören und pro Artikel mehr als 10 kosten. Erstelle zuerst eine boolesche Maske, eine Series mit einem True oder False pro Zeile. Verwende sie dann, um die passenden Zeilen auszuwählen.

Eine Maske erstellen und anwenden
is_stationery = orders["category"] == "Stationery"
stationery = orders[is_stationery]

Die Maske lautet True, False, True, False, False und True. Die Auswahl behält die Bezeichnungen 0, 2 und 5, die den Bestellungen 1001, 1003 und 1006 entsprechen. Das Filtern erhält diese Bezeichnungen und nummeriert sie nicht neu. reset_index(drop=True) erzeugt bei Bedarf fortlaufende Bezeichnungen.

Zu den Vergleichsoperatoren gehören ==, !=, <, <=, > und >=. Textvergleiche müssen genau übereinstimmen: "home" unterscheidet sich von "Home", und auch Leerzeichen können eine Übereinstimmung verhindern.

Bedingungen zeilenweise verknüpfen
is_home = orders["category"] == "Home"
is_expensive = orders["unit_price"] > 10
orders[is_home & is_expensive]

Nur die Desk lamp erfüllt die Bedingung: Ihre Kategorie ist Home und ihr Preis beträgt 18.0. Der Mug gehört zu Home, kostet aber 6.0. Backpack kostet 35.0, gehört aber zu Bags.

Wenn du Vergleiche direkt schreibst, setze jeden in Klammern:

orders[(orders["category"] == "Home") &
       (orders["unit_price"] > 10)]

Verwende & für und, | für oder und ~ für nicht. Die Klammern halten jeden Vergleich zusammen, bevor pandas die Masken verknüpft. Ohne sie kann Python aufgrund seiner Vorrangregeln versuchen, eine Zeichenkette und eine Series mit & zu verknüpfen, und einen TypeError auslösen.

Pythons and, or und not erwarten einen einzelnen Wahrheitswert und keine Spalte von Wahrheitswerten. Ihre Verwendung auf Masken löst einen ValueError wegen eines mehrdeutigen Wahrheitswerts aus. Ein einfaches if orders["quantity"] > 1: hat dasselbe Problem. Verwende .any(), um zu fragen, ob irgendeine Zeile zutrifft, oder .all(), um zu fragen, ob jede Zeile zutrifft.

Treffer und Anteile zählen

is_stationery.sum() ist 3, weil True als 1 und False als 0 zählt. is_stationery.mean() ist 0.5, der Anteil der sechs Bestellungen, die zutreffen. Multipliziere mit 100, um diesen Anteil als 50 % auszudrücken.

Fehlende Werte ausdrücklich behandeln

Bei der ursprünglichen float64-Spalte quantity ergeben Vergleiche mit NaN False, außer !=, das True ergibt. quantity >= 1 behält fünf Zeilen; quantity < 1 behält keine. Die leere Mengenangabe ist in keiner der beiden Auswahlen enthalten. Dennoch schließt quantity != 3 diese Zeile mit leerem Wert ein. Ungleich bedeutet also nicht bekannt und verschieden.

Nach der Umwandlung in Int64 mit Fehlwertunterstützung ergibt ein Vergleich mit <NA> den Wert <NA>, und beim Filtern werden diese Zeilen ausgelassen. Verwende isna() oder notna(), wenn es um Lücken geht.

Um neben Zeilen auch Spalten auszuwählen, verwende orders.loc[is_home, "product"]. Der Aufruf gibt Desk lamp und Mug zurück. Eine benannte Maske kann wiederverwendet werden, um dieselben Zeilen zu untersuchen, zu zählen und zu aktualisieren.

Wichtige Erkenntnisse

  • Ein Vergleich erzeugt ein boolesches Ergebnis pro Zeile; das Filtern behält Zeilen mit True und erhält ihre Bezeichnungen.
  • Verknüpfe Masken mit &, | und ~ und setze Vergleiche in Klammern.
  • Verwende .any() oder .all(), wenn ein einzelner Wahrheitswert benötigt wird.
  • Die Summe einer booleschen Maske zählt Treffer und ihr arithmetisches Mittel gibt deren Anteil an.
  • Prüfe Lücken ausdrücklich: NaN bei Gleitkommazahlen und <NA> bei Datentypen mit Fehlwertunterstützung verhalten sich bei Vergleichen unterschiedlich.
  • Bei Textvergleichen auf Gleichheit zählen Groß- und Kleinschreibung sowie Leerzeichen.

4.2 Hilfsmethoden und query für häufige Filteraufgaben nutzen

Manche Filter haben vertraute Formen: Zugehörigkeit zu einer Liste, ein numerisches Intervall, ein fehlender Wert oder ein Textfragment. Hilfsmethoden drücken diese Tests direkt aus und erzeugen weiterhin Masken, die sich mit anderen Bedingungen verknüpfen lassen.

Zugehörigkeit und Wertebereiche prüfen
orders[orders["category"].isin(["Home", "Bags"])]
orders[orders["unit_price"].between(4.75, 18)]

isin trifft auf jeden aufgeführten Wert zu. Die erste Auswahl enthält die Bestellungen 1002, 1004 und 1005. ~orders["category"].isin(["Home"]) kehrt die Zugehörigkeit um und behält Zeilen mit Stationery und Bags. Ein Python-Ausdruck mit in erzeugt diese zeilenweise Zugehörigkeitsmaske nicht.

between schließt standardmäßig beide Endpunkte ein. Die zweite Auswahl enthält Desk lamp zu 18.0, Pen set zu 4.75 und Mug zu 6.0. Verwende inclusive="neither", um beide Endpunkte auszuschließen, "left", um nur den unteren Endpunkt einzuschließen, oder "right", um nur den oberen Endpunkt einzuschließen. Wähle die Regel für die Endpunkte passend zur gestellten Frage.

Fehlende und vorhandene Einträge finden

orders[orders["quantity"].isna()] behält Bestellung 1006. notna() bewirkt das Gegenteil und behält erfasste Mengen. Prüfe nicht auf Gleichheit mit np.nan: NaN ist selbst zu sich selbst ungleich, sodass quantity == np.nan die Zeile mit fehlendem Wert nicht findet.

Innerhalb von Text suchen
orders[orders["product"].str.contains("note", case=False, na=False)]

str.contains prüft, ob jeder Textwert eine Übereinstimmung enthält. Ohne Berücksichtigung der Groß- und Kleinschreibung werden beide Notebook-Zeilen gefunden. na=False lässt fehlenden Text als Nichtübereinstimmung zählen. Die Suche behandelt ihr Muster standardmäßig als regulären Ausdruck; bei einem wörtlichen Textfragment mit Satzzeichen verhindert regex=False, dass diese Satzzeichen als Muster interpretiert werden. str.startswith und str.endswith prüfen Anfang und Ende.

Einen Filter als Abfrage schreiben
orders.query("quantity >= 2 and unit_price < 5")

Dies behält die Bestellungen 1001 und 1003. Innerhalb einer query-Zeichenkette stehen Spaltennamen für Spalten und and, or und not sind erlaubt. Die Zeichenkette ist ein pandas-Abfrageausdruck; ihre Syntax entspricht nicht der direkten Verknüpfung von Series in gewöhnlichem Python.

Eine Python-Variable benötigt @:

limit = 5
orders.query("unit_price > @limit")

Das Ergebnis enthält Desk lamp, Mug und Backpack. Ein Spaltenname mit Leerzeichen benötigt innerhalb der Abfrage Graviszeichen, wie in orders.query("`unit price` > 5").

Dieselbe Frage lässt sich als Maske, Hilfsmethodenaufruf oder Abfrage schreiben. Bevorzuge die Form, die die Regel klar erkennen lässt. Für ein Intervall stellt between die Schranken und die Regel für ihren Einschluss zusammen dar. Für eine Menge erlaubter Bezeichnungen vermeidet isin wiederholte Gleichheitstests. Verhält sich ein Filter unerwartet, untersuche die Maske und die genauen Spaltenwerte, bevor du die Bedingung änderst.

Wichtige Erkenntnisse

  • isin prüft die Zugehörigkeit und ~ kehrt die Maske um.
  • between schließt beide Endpunkte ein, sofern inclusive die Regel nicht ändert.
  • isna und notna erkennen Lücken und erfasste Werte.
  • str.contains durchsucht Text; case=False ignoriert Groß- und Kleinschreibung und na=False schließt fehlenden Text aus.
  • In query werden Spalten direkt benannt, Python-Variablen verwenden @ und Spaltennamen mit Leerzeichen Graviszeichen.

4.3 Werte in ausgewählten Zeilen sicher ändern

Eine Aktualisierung muss auf die Tabelle zielen, die du ändern möchtest. In pandas 3 verhält sich eine Auswahl unter Copy-on-Write wie ein separates Objekt. Eine Änderung am ausgewählten Objekt ändert daher seine Ursprungstabelle nicht.

Das gesamte Ziel in eine loc-Zuweisung setzen
sale = orders.copy()
is_home = sale["category"] == "Home"
sale.loc[is_home, "unit_price"] *= 0.9

Die Maske wählt zwei Home-Zeilen aus. Die Spaltenauswahl zielt auf deren Preise. Die Multiplikation mit 0,9 behält 90 % jedes Preises bei und senkt 18,00 auf 16,20 und 6,00 auf 5,40. Andere Zeilen bleiben unverändert. Die ausgeschriebene Form liest rechts dieselbe Auswahl aus und weist links ihre multiplizierten Werte zu.

Hier ist sale eine separate Tabelle für eine Preisänderung, sodass orders für den Vergleich verfügbar bleibt. Um die ursprüngliche Tabelle zu aktualisieren, setze orders.loc[...] selbst auf die linke Seite der Zuweisung.

Verkettete Zuweisung vermeiden
orders[orders["category"] == "Home"]["unit_price"] = 0

Dies verwendet zwei Indizierungsschritte. Der erste erzeugt ein ausgewähltes Objekt; der zweite weist diesem Objekt einen Wert zu. In pandas 3 aktualisiert dies niemals orders, und eine ChainedAssignmentError-Warnung weist auf das Problem hin. Dasselbe Problem betrifft orders["unit_price"][1] = 0.

Verwende orders.loc[orders["category"] == "Home", "unit_price"] = 0, wenn die ursprüngliche Tabelle geändert werden soll. Tabelle, passende Zeilen und Spalte werden alle in einer Zuweisung angegeben.

Ausgewählte Tabellen verstehen

Nach home = orders[orders["category"] == "Home"] ändert eine Änderung an home["unit_price"] nur home. Spätere Änderungen an orders ändern ebenfalls nicht home. Die Objekte können sich intern Speicher teilen, bis ein Schreibvorgang nötig wird, aber ihre sichtbaren Werte verhalten sich unabhängig voneinander.

Ältere pandas-Beispiele zeigen möglicherweise eine SettingWithCopyWarning und verwenden nach einer Auswahl .copy(), um unsichere Aktualisierungen zu vermeiden. pandas 3 hat diese Warnung entfernt und sorgt einheitlich dafür, dass sich Auswahlen unabhängig verhalten. Ein ausdrückliches .copy() ist weiterhin nützlich, um die Absicht deutlich zu machen, aber eine Auswahl verhält sich bei Aktualisierungen bereits unabhängig.

Werte auf der rechten Seite dem Ziel zuordnen

Ein Skalar füllt alle ausgewählten Zellen. Eine Liste benötigt genau einen Wert pro ausgewählter Zeile und füllt sie in der Reihenfolge der Auswahl. Eine Series wird anhand der Indexbezeichnung ausgerichtet:

new_prices = pd.Series([16.2, 5.4], index=[1, 3])
sale.loc[is_home, "unit_price"] = new_prices

Die Home-Zeilen haben die Bezeichnungen 1 und 3 und erhalten daher 16.2 und 5.4. Würde eine ausgewählte Bezeichnung in der Series fehlen, wäre der zugewiesene Wert NaN; Zeilen außerhalb der Auswahl blieben unverändert. Gleiche Längen allein stellen keine Zuordnung der Series zu den Zeilen sicher.

Untersuche sale.loc[is_home, "unit_price"] nach der Änderung und vergleiche es mit orders.loc[is_home, "unit_price"]. Das .sum() der Maske ist 2 und gibt damit die erwartete Anzahl der für diesen Rabatt ausgewählten Zeilen an.

Wichtige Erkenntnisse

  • Aktualisiere die gewünschte Tabelle mit einer einzigen loc[mask, column]-Zuweisung.
  • In pandas 3 aktualisiert eine verkettete Zuweisung niemals die ursprüngliche Tabelle.
  • Auswahlen verhalten sich unter Copy-on-Write unabhängig.
  • Ein Skalar füllt die Auswahl; eine Liste folgt der Reihenfolge; eine Series wird nach Bezeichnung ausgerichtet.
5

Spalten hinzufügen und transformieren

Berechnete Spalten drücken Zusammenhänge aus, die bereits in einer Tabelle vorhanden sind: Aus Menge und Preis wird Umsatz, während eine Bedingung zu einer Kategoriebezeichnung wird. Verwende vektorisierte Arithmetik und kleine Transformationen, um diese Regeln klar zu formulieren. Du wählst außerdem zwischen der Zuordnung jedes Werts und dem Ersetzen einzelner Werte, behältst Ergebnisse durch Zuweisung und berücksichtigst fehlende Eingaben und die Ausrichtung anhand von Bezeichnungen, wenn neue Werte in eine Tabelle gelangen.

5.1 Neue Spalten aus vorhandenen Spalten berechnen

Neue Spalten machen aus erfassten Daten Größen, die du analysieren kannst. Eine Berechnung zwischen Spalten erfolgt zeilenweise, während der Index jedes Ergebnis seiner Beobachtung zugeordnet hält.

Umsatz berechnen
orders["revenue"] = orders["quantity"] * orders["unit_price"]

Die sechs Umsätze sind 7.5, 18.0, 9.5, 24.0, 35.0 und NaN. In der ersten Zeile ergeben drei Artikel zu je 2,50 den Wert 7,50. Die letzte Zeile hat eine unbekannte Menge, daher ist auch ihr Umsatz unbekannt. Die Zuweisung an einen neuen Namen fügt rechts eine Spalte hinzu; die Zuweisung an einen vorhandenen Namen überschreibt diese Spalte.

Spaltenarithmetik ist vektorisiert. Sie drückt eine Regel für die ganze Spalte aus und vermeidet eine Python-Schleife über Zeilen. Bei großen Tabellen ist dies deutlich schneller als for oder iterrows, und der Ausdruck macht den Zusammenhang zwischen den Eingaben deutlich.

Die erfassten Werte für eine Summe verwenden

orders["revenue"].sum() überspringt NaN und ergibt 94.0, die Summe der fünf bekannten Umsätze. .mean() ergibt 18.8, weil der Nenner fünf erfasste Umsätze umfasst. Würdest du 94.0 durch alle sechs Zeilen dividieren, würdest du den fehlenden Umsatz stillschweigend so behandeln, als hätte er eine bekannte Null beigetragen.

Um prozentuale Anteile zu berechnen:

orders["share_pct"] = (
    orders["revenue"] / orders["revenue"].sum() * 100
).round(1)

Die Anteile sind 8.0, 19.1, 10.1, 25.5, 37.2 und NaN. Dies sind Anteile an der bekannten Summe. Der fehlende Eintrag bleibt bei der Arithmetik fehlend.

Mit assign eine Tabelle zurückgeben

assign gibt einen neuen DataFrame mit hinzugefügten oder ersetzten Spalten zurück und lässt seine Eingabe unverändert. Es lässt sich gut in einer Kette verwenden:

with_tax = orders.assign(
    tax=lambda d: (d["revenue"] * 0.2).round(2)
)

Der Lambda-Ausdruck liest die Tabelle an dieser Stelle der Kette. Er liefert die Steuerwerte 1.5, 3.6, 1.9, 4.8, 7.0 und NaN. In pandas 3 ist pd.col("revenue") * 0.2 eine weitere Möglichkeit, in assign auf eine Spalte zu verweisen.

Bei Dezimalrechnungen können winzige binäre Gleitkommafehler sichtbar werden: 9,5 mal 0,2 kann als 1.9000000000000001 gespeichert werden. .round(2) liefert einen nützlichen Wert für die Darstellung. Vermeide exakte Gleichheitstests bei berechneten Dezimalzahlen, wenn kleine Darstellungsfehler möglich sind.

Wissen, wie Zuweisungen Zeilen zuordnen
orders["home_price"] = orders.loc[
    orders["category"] == "Home", "unit_price"
]

Die zugewiesene Series hat die Bezeichnungen 1 und 3. Diese Zeilen erhalten 18.0 und 6.0; jede andere Zeile erhält NaN. Die Zuweisung einer Series ordnet anhand der Bezeichnungen zu, auch wenn ihre Länge von der der Tabelle abweicht. Eine einfache Liste hat keine Bezeichnungen und muss genau einen Wert pro Zeile enthalten. Ein Skalar wie in orders["currency"] = "EUR" füllt jede Zeile.

Werte aus Text oder Datumsangaben ableiten

Auch die Accessoren .str und .dt bieten vektorisierte Spaltenoperationen. orders["product"].str.upper() liefert Namen in Großbuchstaben und .str.len() die Längen 8, 9, 7, 3, 8 und 8. Weise solche Ergebnisse einer neuen Spalte zu, wenn sowohl die ursprünglichen als auch die abgeleiteten Werte nützlich sind.

Wichtige Erkenntnisse

  • Die Zuweisung eines Spaltenausdrucks speichert ein Ergebnis pro Zeile.
  • Unbekannte Eingaben ergeben bei der Arithmetik meist unbekannte Ergebnisse; Zusammenfassungen überspringen fehlende Werte standardmäßig.
  • Vektorisierte Spaltenoperationen vermeiden Schleifen über Zeilen.
  • assign gibt einen neuen DataFrame zurück und kann über einen Lambda-Ausdruck auf Spalten zugreifen.
  • Die Zuweisung einer Series ordnet nach Bezeichnungen zu; die Zuweisung einer Liste folgt Zeilenreihenfolge und -anzahl.
  • Verwende .str und .dt für Spalten, die aus Text und Datumsangaben abgeleitet werden.

5.2 Werte mit np.where, map und apply umkodieren und transformieren

Eine Spalte zu transformieren kann bedeuten, eine numerische Regel anzuwenden, eine Bezeichnung zuzuweisen oder vorhandene Bezeichnungen zu übersetzen. Wähle eine Methode, deren Verhalten zur Regel passt, besonders für Werte, die die Regel nicht nennt.

Eine Bedingung in Bezeichnungen umwandeln
orders["price_band"] = np.where(
    orders["unit_price"] >= 5, "high", "low"
)

np.where wählt sein zweites Argument, wenn die Bedingung True ist, und sein drittes, wenn sie False ist. Für die Preise 2,50; 18,00; 4,75; 6,00; 35,00 und 2,50 lauten die Bezeichnungen low, high, low, high, high und low. Das >= schließt einen Preis ein, der genau 5 beträgt.

Alle Werte zuordnen oder einzelne ändern
codes = {"Stationery": "ST", "Home": "HM", "Bags": "BG"}
orders["category_code"] = orders["category"].map(codes)

map mit einem Dictionary ergibt ST, HM, ST, HM, BG und ST. Ein Wert, der im Dictionary fehlt, wird zu NaN. Steht dort nur {"Stationery": "ST"}, werden sowohl Home als auch Bags zu fehlenden Werten. Verwende eine vollständige Zuordnung, wenn jede Kategorie einen zugeordneten Code benötigt.

replace ändert aufgeführte Werte und lässt nicht aufgeführte unverändert. orders["category"].replace({"Bags": "Luggage"}) behält Stationery und Home bei und benennt Bags um.

Gewünschte ÄnderungGeeignete Methode
Jeder bekannten Kategorie einen Code gebenmap mit einem Dictionary
Einzelne vorhandene Bezeichnungen umbenennenreplace
Anhand einer Bedingung zwischen zwei Ausgaben wählennp.where
Eine eigene Funktion anwenden

Eine Series kann jeden Wert über map oder apply an eine Funktion übergeben. orders["product"].apply(len) gibt die Länge jedes Produktnamens zurück. Übergib len selbst; len() würde die Funktion sofort ohne Wert aufrufen.

Ein Lambda-Ausdruck kann eine kurze Regel für Werte ausdrücken: orders["unit_price"].apply(lambda p: "budget" if p < 5 else "standard"). Dies gibt budget, standard, budget, standard, standard und budget zurück.

Für Logik, die mehrere Zellen einer Zeile benötigt, akzeptiert apply auf einem DataFrame axis=1:

orders.apply(
    lambda r: r["quantity"] * r["unit_price"], axis=1
)

Die Funktion liest Menge und Preis jeder Zeile. Für diese Berechnung ist die direkte Spaltenmultiplikation klarer und bei einer großen Tabelle deutlich schneller. Verwende vektorisierte Ausdrücke oder np.where, wenn sie die Berechnung ausdrücken können; behalte zeilenweise Funktionen für Logik vor, die sie benötigt.

Integrierte numerische Transformationen verwenden

round(n) rundet auf n Nachkommastellen, abs() gibt absolute Werte zurück und clip(lower=..., upper=...) begrenzt Werte an Schranken. orders["unit_price"].clip(upper=20) ändert 35.0 in 20.0 und lässt die anderen fünf Preise unverändert. Die teure Zeile wird nicht entfernt.

Diese Transformationen geben neue Werte zurück. Weise sie einer neuen Spalte zu, um die Eingabe für eine Prüfung zu erhalten, oder überschreibe das Original, wenn dies beabsichtigt ist. Untersuche einige transformierte Zeilen oder führe value_counts() aus, um zu prüfen, ob neue Bezeichnungen und ihre Anzahlen zur Regel passen.

Wichtige Erkenntnisse

  • np.where wählt für jeden Bedingungswert eine Ausgabe für den Fall True oder False.
  • map mit einem Dictionary macht nicht aufgeführte Werte zu fehlenden Werten; replace behält sie bei.
  • Übergib apply die Funktion selbst; verwende axis=1 für eine Zeilenfunktion auf einem DataFrame.
  • Bevorzuge vektorisierte Operationen, wenn sie die Regel ausdrücken.
  • clip begrenzt Werte, während round und abs sie transformieren, ohne Zeilen auszuwählen.
6

Daten sortieren, Ränge vergeben und Daten zusammenfassen

Eine geordnete Tabelle und eine kompakte statistische Zusammenfassung beantworten unterschiedliche Fragen zu denselben Beobachtungen. Sortiere Datensätze, weise Ränge mit einer bewusst gewählten Regel für Rangbindungen zu und wähle Anzahlen, Lagemaße oder Streuungsmaße, die zu den Daten passen. Untersuche anschließend Kategorieanteile und Zusammenhänge zwischen numerischen Variablen. Fehlende Werte, die Richtung der Rangvergabe, Nenner bei Stichproben und die Grenzen der Korrelation beeinflussen, wie ein Ergebnis zu verstehen ist.

6.1 Zeilen nach Werten oder nach dem Index sortieren

Das Sortieren ändert die Reihenfolge, in der Beobachtungen erscheinen. Es hält die Werte jeder Zeile zusammen und nimmt die Zeilenbezeichnung mit. Entscheide, was Vorrang hat und wie gleiche Werte geordnet werden sollen, bevor du die obersten oder untersten Zeilen auswählst.

Nach einer Spalte sortieren
scores = pd.DataFrame({
    "name": ["Ana", "Ben", "Chen", "Dara", "Eli"],
    "points": [88, 92, 88, 75, 92]
})
ordered = scores.sort_values("points")

Standardmäßig steht der kleinste Wert zuerst. Die 75 von Dara steht am Anfang, gefolgt von den beiden Werten 88 und dann den beiden Werten 92. Zeilenbezeichnungen bewegen sich mit den Datensätzen. Bei gleichen Werten garantiert der standardmäßige Sortieralgorithmus nicht die ursprüngliche Reihenfolge; die angezeigten Bezeichnungen können 3, 0, 2, 1, 4 lauten, aber du darfst nicht davon ausgehen, dass Zeilen mit gleichen Werten diese Reihenfolge behalten.

Verwende ascending=False, damit der größte Wert zuerst steht. sort_values gibt eine Tabelle zurück und lässt scores unverändert, sofern das Ergebnis nicht zugewiesen wird.

Die Behandlung gleicher Werte festlegen
scores.sort_values(
    ["points", "name"], ascending=[False, True]
)

Der erste Schlüssel hat Vorrang. Die Punktzahlen nehmen ab; bei gleichen Punktzahlen steigen die Namen auf. Die Reihenfolge lautet Ben, Eli, Ana, Chen und Dara. Eine Sortierung zuerst nach Namen würde eine andere Frage beantworten, weil die Namen dann der primäre Schlüssel wären.

Sollen bei einer Sortierung nach einer Spalte gleiche Werte ihre Eingabereihenfolge behalten, verwende scores.sort_values("points", kind="stable"). Die stabile Sortierung erhält die bisherige Reihenfolge solcher Zeilen. Ein zweiter Schlüssel gibt gleichen Werten dagegen eine eigene ausdrückliche Sortierregel.

Fehlende Werte und Text platzieren

Fehlende Werte stehen standardmäßig sowohl bei aufsteigender als auch bei absteigender Sortierung zuletzt. pd.Series([3.0, np.nan, 1.0]).sort_values() ergibt 1.0, 3.0 und dann NaN. na_position="first" verschiebt den fehlenden Eintrag an den Anfang; das bloße Umkehren der Sortierrichtung bewirkt dies nicht.

Die Textsortierung folgt den Zeichencodes. "Zebra" steht vor "apple", weil Groß- und Kleinbuchstaben unterschiedliche Bereiche belegen. Einheitlich geschriebene Namen wie Bags, Home und Stationery stehen in der erwarteten alphabetischen Reihenfolge.

Bezeichnungen sortieren oder neu nummerieren

sort_index() ordnet die Zeilenbezeichnungen und nicht die Datenwerte. Nach dem Sortieren nach Punkten kann es die ursprüngliche Reihenfolge der Standardbezeichnungen wiederherstellen. sort_index(ascending=False) kehrt die Reihenfolge der Bezeichnungen um. reset_index(drop=True) dagegen behält die aktuelle Zeilenreihenfolge bei und ersetzt ihre Bezeichnungen durch 0, 1, 2 und so weiter.

Die größten oder kleinsten Zeilen auswählen

scores.nlargest(2, "points") gibt Ben und Eli zurück, beide mit 92. nsmallest wählt stattdessen niedrige Werte. Fällt die Auswahlgrenze in eine Rangbindung, entscheide, ob alle Zeilen mit gleichem Wert behalten werden sollen. scores.nlargest(1, "points", keep="all") gibt beide Werte 92 zurück, obwohl n gleich 1 ist. Die angeforderte Anzahl ist dann eine Auswahlgrenze und keine Zusage über die endgültige Zeilenanzahl.

Wichtige Erkenntnisse

  • sort_values ordnet Zeilen nach Datenwerten; sort_index ordnet Zeilenbezeichnungen.
  • ascending=False setzt große Werte an den Anfang, während fehlende Werte standardmäßig weiterhin zuletzt stehen.
  • Mehrere Sortierschlüssel werden nach Priorität angewendet und können unterschiedliche Richtungen verwenden.
  • Verwende einen zweiten Schlüssel oder eine stabile Sortierung nach einer Spalte, wenn die Reihenfolge gleicher Werte wichtig ist.
  • reset_index(drop=True) nummeriert die aktuelle Reihenfolge neu, ohne erneut zu sortieren.
  • keep="all" kann bei der Auswahl größter Werte mehr als n Zeilen zurückgeben.

6.2 Werten Ränge zuweisen und Rangbindungen berücksichtigen

Ein Rang hält fest, wo ein Wert in der sortierten Reihenfolge hingehört, ohne seine Zeile zu verschieben. Das ist nützlich, wenn jede Beobachtung neben ihren ursprünglichen Daten eine Platznummer benötigt. Rangbindungen brauchen eine Regel, weil mehrere Werte denselben Teil dieser Reihenfolge belegen können.

Die Richtung wählen

scores["points"].rank() vergibt Ränge vom kleinsten zum größten Wert. Verwende ascending=False für eine Ergebnistabelle, in der hohe Punktzahlen die besten Ränge erhalten sollen. Die Methode für Rangbindungen entscheidet dann, welche Platznummer jede Gruppe gleicher Werte erhält.

Die Beispielpunktzahlen in Zeilenreihenfolge sind Ana 88, Ben 92, Chen 88, Dara 75 und Eli 92. In absteigender Reihenfolge belegen die Werte 92 die Plätze 1 und 2, die Werte 88 die Plätze 3 und 4 und 75 den Platz 5. Die Standardeinstellung method="average" weist jedem gleichen Wert das arithmetische Mittel der belegten Plätze zu. Die zurückgegebenen Werte in der ursprünglichen Zeilenreihenfolge lauten 3,5; 1,5; 3,5; 5,0 und 1,5.

Eine Methode für Rangbindungen wählen
MethodeAbsteigende Ränge in ursprünglicher ZeilenreihenfolgeRegel für Rangbindungen
average3,5; 1,5; 3,5; 5,0; 1,5Mittelwert der belegten Ränge
min3, 1, 3, 5, 1Kleinster belegter Rang
max4, 2, 4, 5, 2Größter belegter Rang
dense2, 1, 2, 3, 1Ein Rang pro unterschiedlichem Wert, keine Lücken
first3, 1, 4, 5, 2Getrennte Ränge nach Auftretensreihenfolge

Bei min bedeuten zwei Gewinner auf Rang 1, dass die nächste Punktzahl auf Rang 3 beginnt. Bei dense beginnt die nächste andere Punktzahl auf Rang 2. first löst eine Rangbindung auch dann auf, wenn die Punktzahlen selbst keinen Grund bieten, eine Person zu bevorzugen; es folgt der Eingabereihenfolge.

Rangergebnisse sind Gleitkommazahlen und erlauben damit Werte wie 1,5. Wenn eine gewählte Methode für Rangbindungen ganzzahlige Ränge ergibt und keiner fehlt, wandelt .astype(int) sie für die Darstellung in Ganzzahlen um. Ein gewöhnlicher Ganzzahldatentyp kann keinen fehlenden Rang aufnehmen.

Ränge als Anteile ausdrücken

Bei der standardmäßigen Mittelwertmethode und nicht fehlenden Werten dividiert rank(pct=True) jeden Rang durch die Anzahl der eingestuften Werte. Die aufsteigende Einstufung der fünf Beispielpunktzahlen ergibt 2,5; 4,5; 2,5; 1,0 und 4,5. Die Division durch fünf ergibt 0,5; 0,9; 0,5; 0,2 und 0,9.

Die höchsten Werte mit Rangbindung erhalten 0,9 und nicht 1, weil ihr mittlerer Rang 4,5 ist. Ein relativer Rang beschreibt den Rang im Verhältnis zu den eingestuften Werten; er ist kein Prozentsatz der Punktzahl selbst.

Fehlende Ränge behandeln und Ergebnisse speichern

Fehlende Werte behalten standardmäßig NaN als Rang. Bei den Umsätzen 7,5; 18,0; 9,5; 24,0; 35,0 und NaN lauten die absteigenden Ränge 5, 3, 4, 2, 1 und NaN. na_option="bottom" setzt den fehlenden Eintrag hinter die erfassten Werte und gibt ihm Rang 6.

scores["place"] = scores["points"].rank(
    method="min", ascending=False
)

Die Zeilen bleiben Ana, Ben, Chen, Dara und Eli. Die neue Spalte place enthält 3, 1, 3, 5 und 1. Sortiere separat, wenn die Anzeige die Gewinner zuerst zeigen soll.

Wichtige Erkenntnisse

  • Die Rangvergabe weist Plätze zu, ohne Zeilen zu verschieben; bei absteigender Rangvergabe erhalten große Werte niedrige Rangzahlen.
  • Methoden für Rangbindungen legen fest, ob geteilte Ränge Lücken lassen oder der Eingabereihenfolge folgen.
  • Die standardmäßige Mittelwertmethode kann gebrochene Ränge zurückgeben.
  • Bei der standardmäßigen Rangvergabe mit Mittelwert dividiert pct=True durch die Anzahl der eingestuften Werte.
  • Fehlende Werte behalten standardmäßig fehlende Ränge; na_option="bottom" setzt sie auf den letzten Rang.

6.3 Spalten mit deskriptiven Kennwerten zusammenfassen

Ein deskriptiver Kennwert verdichtet viele Beobachtungen zu einer nützlichen Größe. Wähle einen Kennwert, der zur Frage passt, und lies die Anzahl nicht fehlender Werte ab, damit du weißt, auf wie vielen Daten er beruht.

Lagemaße und Streuung berechnen
weather = pd.DataFrame({
    "temp_c": [14.0, 17.5, 16.0, 21.0, 19.5, 12.5, 15.0],
    "rain_mm": [0.0, 2.4, 0.0, 0.0, 5.1, 12.3, 0.8]
}, index=["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"])

Für weather["temp_c"] ist sum() gleich 115.5, mean() gleich 16.5 und median() gleich 16.0. Das Minimum ist 12.5 und das Maximum 21.0, was eine Spannweite von 8,5 °C ergibt. idxmax() gibt die Bezeichnung "Thu" zurück, während idxmin() "Sat" zurückgibt: Sie identifizieren Beobachtungen, statt die Extremwerte selbst zurückzugeben.

std() und var() messen die Streuung. pandas verwendet standardmäßig den Nenner für Stichproben, ddof=1, und dividiert die quadrierten Abweichungen durch eine um eins kleinere Anzahl als die Anzahl der Werte. Hier beträgt die Standardabweichung etwa 3,028 °C und die Varianz etwa 9,167 Quadratgrad Celsius. std(ddof=0) verwendet die Anzahl selbst und ergibt etwa 2,803 °C. NumPys np.std verwendet standardmäßig ddof=0; gleiche daher die Einstellung an, bevor du Ergebnisse vergleichst.

Quartile und describe auslesen

quantile(0.25) liefert das untere Quartil 14.5; quantile(0.5) liefert den Median 16.0; quantile(0.75) liefert das obere Quartil 18.5. Die standardmäßige Interpolation kann einen Wert zwischen erfassten Messwerten zurückgeben.

weather.describe() stellt Anzahl, arithmetisches Mittel, Standardabweichung, Minimum, die drei Quartile und Maximum für numerische Spalten zusammen. Der Regen hat ein arithmetisches Mittel von etwa 2,94 mm und einen Median von 0,8 mm. Der Messwert von 12,3 mm zieht das arithmetische Mittel nach oben; der Median beschreibt einen typischen Tag in dieser Woche mit rechtsschief verteiltem Niederschlag besser.

Fehlende Werte und Datentypen berücksichtigen

Für pd.Series([1, np.nan, 3]) ist .mean() gleich 2.0, weil fehlende Werte standardmäßig übersprungen werden. .count() ist 2, während .size gleich 3 ist. Mit skipna=False ist das arithmetische Mittel NaN. Verwende nicht die Zeilenanzahl als Nenner für das standardmäßige arithmetische Mittel, wenn einige Einträge fehlen.

Textzusammenfassungen sind anders. orders["category"].describe() ergibt count 6, unique 3, top Stationery und freq 3. Die Mittelwertberechnung für die Bestelltabelle mit gemischten Daten einschließlich Text löst einen TypeError aus; verwende orders.mean(numeric_only=True) oder wähle mit select_dtypes("number") numerische Spalten aus.

Entlang einer Achse zusammenfassen

Standardmäßig reduzieren DataFrame-Kennwerte entlang der Zeilen auf ein Ergebnis pro Spalte. axis=1 liefert stattdessen ein Ergebnis pro Zeile; wähle Größen aus, deren Einheiten sich sinnvoll kombinieren lassen.

orders[["quantity", "unit_price"]].agg(["mean", "max"])

agg berechnet mehrere benannte Kennwerte gemeinsam. Quantity hat ein arithmetisches Mittel von 2.2 und ein Maximum von 4.0; unit_price hat ein arithmetisches Mittel von etwa 11.46 und ein Maximum von 35.0. weather["rain_mm"].cumsum() ergibt die kumulativen Summen 0.0, 2.4, 2.4, 2.4, 7.5, 19.8 und 20.6 mm und behält ein Ergebnis pro Tag bei.

Wichtige Erkenntnisse

  • Wähle Summen, Lagemaße oder Streuungsmaße passend zur Frage.
  • describe stellt gängige numerische Kennwerte zusammen; Textspalten haben Zusammenfassungen auf Basis von Häufigkeiten.
  • count schließt fehlende Werte aus, während size sie einschließt.
  • Die Standardabweichung in pandas verwendet ddof=1; NumPy verwendet standardmäßig ddof=0.
  • Quantile können zwischen Messwerten interpolieren.
  • idxmax und idxmin geben Bezeichnungen zurück; cumsum gibt kumulative Summen zurück.
  • agg fordert mehrere Kennwerte an und axis steuert die Richtung der Reduktion.

6.4 Werte zählen und Zusammenhänge messen

Häufigkeiten beschreiben, wie oft Werte vorkommen; Korrelationen beschreiben, wie zwei numerische Variablen gemeinsam variieren. Beide Zusammenfassungen müssen interpretiert werden: Was wird gezählt, was fehlt und welchen Zusammenhang misst der Kennwert?

Kategorien zählen oder unterschiedliche Werte aufführen

orders["category"].value_counts() ergibt Stationery 3, Home 2 und Bags 1, nach Häufigkeit geordnet. Die zurückgegebene Series heißt count. Fehlende Einträge werden standardmäßig ausgeschlossen; dropna=False zählt sie separat mit.

orders["category"].value_counts(normalize=True)

Die normierte Series heißt proportion: Stationery ist 0.5, Home etwa 0.333 und Bags etwa 0.167. Die Multiplikation mit 100 ergibt Prozentangaben. Bei der standardmäßigen Regel für fehlende Werte beschreiben diese Anteile die vorhandenen Werte.

FrageMethode
Wie häufig kommt jeder Wert vor?value_counts()
Welche unterschiedlichen Werte kommen vor?unique()
Wie viele unterschiedliche vorhandene Werte kommen vor?nunique()
Welcher Wert oder welche Werte kommen am häufigsten vor?mode()

unique() behält die Reihenfolge des ersten Auftretens bei: Stationery, Home, Bags. mode() gibt eine Series zurück, weil mehrere Werte dieselbe höchste Häufigkeit haben können. Die Methode fordert nicht einen einzelnen willkürlich gewählten Gewinner an.

Bedingungen lassen sich direkt zählen. (weather["rain_mm"] > 0).sum() zählt vier Regentage. Das zugehörige .mean() ist etwa 0.571, sodass es an etwa 57 % der sieben Tage regnete.

Einen geradlinigen Zusammenhang messen

weather["temp_c"].corr(weather["rain_mm"]) ergibt eine Pearson-Korrelation von etwa −0,397. Das negative Vorzeichen besagt, dass in diesen Beobachtungen an wärmeren Tagen tendenziell weniger Regen fiel. Der Betrag beschreibt auf einer Skala von −1 über 0 bis 1, wie gut ein geradliniges Muster passt.

Ein Wert von 1 bedeutet einen perfekten steigenden geradlinigen Zusammenhang; −1 bedeutet einen perfekten fallenden. Ein Wert nahe null bedeutet einen geringen linearen Zusammenhang. Ein gekrümmter Zusammenhang kann dennoch stark sein, selbst wenn die Pearson-Korrelation nahe null liegt. Korrelation beschreibt außerdem einen Zusammenhang und ist kein Beleg dafür, dass die Änderung einer Variablen die Änderung der anderen verursacht.

Eine Korrelationsmatrix auslesen

weather.corr() liefert alle numerischen Paare gemeinsam. Die Matrix ist symmetrisch: Temperatur mit Regen hat dieselbe Korrelation wie Regen mit Temperatur. Eine variierende numerische Spalte hat mit sich selbst die Korrelation 1; eine konstante Spalte hat keine definierte Korrelation und ergibt stattdessen NaN.

Für Zusammenhänge, die durchgehend steigen oder fallen, ohne einer Geraden zu folgen, berechnet method="spearman" die Korrelation aus Rängen. Die Methode ändert, welche Art von Muster zusammengefasst wird; nenne sie daher bei der Berichterstattung über ein Ergebnis.

Die Wetterberechnung verwendet nur sieben Messwerte. Sie beschreibt diese kleine beobachtete Woche; starke Aussagen über ein umfassenderes Klimamuster benötigen mehr Belege. Ein aussagekräftiger Bericht enthält die Variablen, das Vorzeichen und die Größe des Koeffizienten, die Methode und die Anzahl der Beobachtungen.

Wichtige Erkenntnisse

  • value_counts gibt absolute Häufigkeiten aus; die Normierung gibt Anteile der gezählten Werte an.
  • unique, nunique und mode beantworten unterschiedliche Fragen zu verschiedenen und häufigen Werten.
  • Die Summe einer Bedingung zählt Treffer und ihr arithmetisches Mittel gibt einen Anteil an.
  • Die Pearson-Korrelation misst den linearen Zusammenhang von −1 bis 1.
  • Eine Korrelationsmatrix ist symmetrisch; konstante Spalten ergeben undefinierte Korrelationen.
  • Die Spearman-Rangkorrelation arbeitet mit Rängen, und eine Korrelation allein belegt keine Ursache.

Einstieg in pandas: Beispiele

6 Interaktive Lektionen

1

Eine Tabelle mit aussagekräftigen Bezeichnungen erstellen

12 Schritte
Erstelle Daten mit Bezeichnungen, sage die Ausrichtung voraus und wähle einen Index für zuverlässige Abfragen.
  1. 1
    EinführungWerte mit ihrer Bedeutung verbunden halten

    Eine Liste liefert Werte in einer Reihenfolge. pandas ergänzt Bezeichnungen, damit du erkennen kannst, was jeder Wert beschreibt, auch nachdem Zeilen verschoben wurden. Beginne mit einer Variablen mit Bezeichnungen und kombiniere dann mehrere Variablen zu einer Tabelle.

    Die entscheidende Frage ist, ob eine Operation der Identität einer Zeile oder ihrer aktuellen Position folgt. Diese Unterscheidung erklärt sowohl die Arithmetik mit Series als auch die Wahl eines nützlichen Tabellenindex.

  2. 2
    BeispielEine Niederschlags-Series mit Bezeichnungen erstellen

    Erstelle drei Niederschlagsmesswerte in Millimetern:

    rain = pd.Series([4.5, 3.0, 6.2],
        index=["Mon", "Tue", "Wed"], name="rain_mm")
    

    Werte und Bezeichnungen werden der Reihe nach zugeordnet. rain["Tue"] ergibt 3.0, während rain.iloc[0] 4.5 ergibt. Die erste Anforderung nennt einen Tag, die zweite eine Position. .dtype ist float64 und .size ist 3.

  3. 3
    ErklärungEine Regel auf jeden Wert anwenden

    Eine Series unterstützt vektorisierte Operationen: rain * 2 verdoppelt jeden Messwert und behält die Tagesbezeichnungen. rain > 4 erzeugt True, False und True, wiederum nach Tagen bezeichnet.

    Verwende Attribute wie .index, .name und .dtype ohne Klammern. Wenn du die Werte als NumPy-Array brauchst, rufe .to_numpy() auf; .values kann bei manchen Datentypen ein pandas-Array zurückgeben.

  4. 4
    BeispielNach Bezeichnung statt nach angezeigter Zeile addieren

    a enthalte x 1, y 2 und z 3, während b y 10, z 20 und w 30 enthält. In a + b wird y mit y gepaart und ergibt 12.0; z wird mit z gepaart und ergibt 23.0.

    Die Bezeichnungen x und w haben kein Gegenstück, daher sind ihre Ergebnisse NaN. a.add(b, fill_value=0) ergibt stattdessen x 1.0 und w 30.0. Eine gemeinsame Zeilenposition paart keine Einträge mit unterschiedlichen Bezeichnungen.

  5. 5
    HerausforderungEine ausgerichtete Summe vorhersagen

    Eine Series hat die Bezeichnungen a und b mit den Werten 4 und 7. Eine andere hat die Bezeichnungen b und c mit den Werten 3 und 9. Welche Ergebnisse der gewöhnlichen Addition sind nicht fehlend?

    ---reveal---

    Nur b ist in beiden Eingaben vorhanden. Seine Summe ist 7 plus 3, also 10.0. Die Bezeichnungen a und c haben fehlende Ergebnisse. Eine Addition des jeweils ersten Werts würde a fälschlich mit b paaren.

  6. 6
    BeispielMehrere Variablen als Spalten erstellen

    Erstelle eine kleine Bestelltabelle:

    df = pd.DataFrame({"product": ["Notebook", "Mug"],
        "quantity": [3, 4], "unit_price": [2.5, 6.0]})
    

    Jede Liste liefert eine Spalte und muss einen Wert pro Zeile enthalten. Die Spalten teilen sich die Indexbezeichnungen 0 und 1, behalten aber ihre eigenen Datentypen. .shape ist (2, 3), während .size gleich 6 ist, weil es jede Zelle zählt.

  7. 7
    KernaussageDie für den nächsten Schritt benötigte Form erhalten

    df["quantity"] gibt eine Series zurück. df[["quantity"]] gibt einen DataFrame mit einer Spalte zurück, weil die innere Liste eine Sammlung von Spalten anfordert.

    Dies ist ein Unterschied im Aufbau, obwohl die sichtbaren Werte übereinstimmen. Eckige Klammern vermeiden auch Namenskollisionen: Eine Spalte namens size benötigt df["size"], da df.size die Zellenanzahl des DataFrames bezeichnet.

  8. 8
    HerausforderungDie Richtung einer Summe wählen

    Was ergibt für die Spalten a [1, 2] und b [3, 4] eine zeilenweise Summe und mit welcher Achse wird sie angefordert?

    ---reveal---

    Verwende df.sum(axis=1). Die erste Zeile ergibt 1 plus 3, also 4; die zweite ergibt 2 plus 4, also 6. Die Standardachse arbeitet entlang der Zeilen und würde stattdessen die Spaltensummen a 3 und b 7 ergeben.

  9. 9
    BeispielDie Bestell-ID als Index verwenden

    Speichere für eine Tabelle mit einer Spalte order_id by_id = orders.set_index("order_id"). Die Bestellnummern werden in den Zeilenindex und aus den gewöhnlichen Spalten verschoben.

    Eine Abfrage wie by_id.loc[1004] bezeichnet nun eine Bestellung statt ihrer aktuellen Position. Prüfe by_id.index.is_unique, bevor du dich darauf verlässt, dass jede Nummer genau eine Zeile identifiziert; pandas erlaubt doppelte Bezeichnungen.

  10. 10
    TippEine Änderung von Bezeichnungen speichern

    rename, drop, set_index und reset_index geben neue Tabellen zurück. Behalte das Ergebnis durch Zuweisung, etwa mit orders = orders.rename(columns={"unit_price": "price"}).

    Ohne Zuweisung bleibt die alte Tabelle bestehen. Ein falsch geschriebener alter Spaltenname in rename wird standardmäßig ignoriert. Untersuche daher .columns, wenn der erwartete neue Name fehlt.

  11. 11
    HerausforderungIDs wiederherstellen, ohne sie zu verlieren

    Eine Tabelle verwendet Bestell-IDs als Index. Du benötigst einen Standardzeilenindex und brauchst die IDs weiterhin als Daten. Welche Operation solltest du speichern?

    ---reveal---

    Speichere df = df.reset_index(). Dies erhält den alten Index als Spalte und vergibt die Bezeichnungen 0, 1, 2 und so weiter. Mit drop=True würdest du diese IDs stattdessen verwerfen. Die Zeilenreihenfolge bleibt gleich.

  12. 12
    ZusammenfassungIdentität, Typ und Form vorhersagen

    Prüfe vor dem Lesen eines Ergebnisses drei Dinge: welche Bezeichnungen seine Werte identifizieren, welcher Datentyp sie speichert und wie viele Achsen die Auswahl behält.

    Die Arithmetik mit Series folgt den Bezeichnungen. Ein DataFrame organisiert Variablen in Spalten mit Datentypen. Indexänderungen ermöglichen aussagekräftige IDs für spätere Abfragen, sofern die zurückgegebene Tabelle gespeichert wird und ihre Bezeichnungen Zeilen eindeutig identifizieren.

2

Eine CSV-Datei laden und ihre Bedeutung prüfen

13 Schritte
Lies eine Datei ein, verfolge strukturelle Probleme und erhalte nützliche numerische und Datumsdatentypen.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungDas Laden als überprüfbaren Schritt behandeln
  2. 2
    ErklärungDatensätze in eine Tabelle einlesen
  3. 3
    BeispielTrennzeichen und Dezimalzeichen abstimmen
  4. 4
    TippCodes beim Einlesen erhalten
  5. 5
    HerausforderungDen ersten Datensatz erhalten
  6. 6
    BeispielDen sichtbaren Aufbau prüfen
  7. 7
    ErklärungVorhandene und fehlende Werte zählen
  8. 8
    HerausforderungEine ID und einen Messwert prüfen
  9. 9
    BeispielZahlentext umwandeln und einen Fehler zurückverfolgen
  10. 10
    KernaussageAnzahlen mit fehlenden Werten als Ganzzahlen speichern
  11. 11
    BeispielDatumsoperationen ermöglichen
  12. 12
    HerausforderungEinen numerischen Import korrigieren
  13. 13
    ZusammenfassungAufbau, Datentypen und Anzahlen verbinden
3

Zeilen nach Identität oder Position auswählen

10 Schritte
Vergleiche loc und iloc, sage Slice-Endpunkte voraus und behalte die benötigte Ergebnisform.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungFragen, ob Identität oder Position wichtig ist
  2. 2
    BeispielEine bekannte Bestellung auslesen
  3. 3
    BeispielEinen bezeichnungsbasierten Bereich einschließlich beider Endpunkte auslesen
  4. 4
    HerausforderungEine Tabelle mit einer Zeile erhalten
  5. 5
    BeispielEinen Positionsbereich auslesen
  6. 6
    TippRückwärts und über das Ende hinaus auswählen
  7. 7
    HerausforderungEine Zeile und einen einzelnen Wert unterscheiden
  8. 8
    VerbindungEine Kurzform für eine Zelle verwenden
  9. 9
    HerausforderungEine Zeile beim Sortieren verfolgen
  10. 10
    ZusammenfassungAuswahl und Form angeben
4

Datensätze filtern und die richtige Tabelle aktualisieren

13 Schritte
Erstelle eine Bedingung, verknüpfe Tests und nimm unter Copy-on-Write eine gezielte Änderung vor.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEine Datenfrage in einen Zeilentest umwandeln
  2. 2
    BeispielEine boolesche Maske erstellen
  3. 3
    ErklärungBeide Bedingungen voraussetzen
  4. 4
    TippEinen einzelnen Wahrheitswert nur bei Bedarf verwenden
  5. 5
    HerausforderungEine kombinierte Bedingung zählen
  6. 6
    BeispielEinen Wertebereich direkt ausdrücken
  7. 7
    KernaussageLücken mit einem Fehlwerttest finden
  8. 8
    HerausforderungEinen Filter in query übertragen
  9. 9
    BeispielGenau die Home-Preise reduzieren
  10. 10
    ErklärungVerstehen, warum eine Verkettung die Ursprungstabelle verfehlt
  11. 11
    TippAktualisierungswerte nach Bezeichnung zuordnen
  12. 12
    HerausforderungFiltern und Aktualisieren kombinieren
  13. 13
    ZusammenfassungBedingungen und Ziele ausdrücklich angeben
5

Aus vorhandenen Spalten nützliche neue Daten erzeugen

12 Schritte
Berechne Umsatz, erhalte fehlende Werte und wähle passende Methoden für Zuordnung und Transformation.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungEine Regel einmal für jede Spalte ausdrücken
  2. 2
    BeispielEinen Umsatz pro Bestellung berechnen
  3. 3
    KernaussageDen Nenner eines Mittelwerts auslesen
  4. 4
    BeispielEine Spalte innerhalb einer Kette hinzufügen
  5. 5
    HerausforderungEine eingehende Series zuordnen
  6. 6
    BeispielBezeichnungen anhand eines Schwellenwerts wählen
  7. 7
    ErklärungÜber die Bedeutung nicht aufgeführter Werte entscheiden
  8. 8
    HerausforderungEine Methode zur teilweisen Umkodierung wählen
  9. 9
    TippFunktionen übergeben, ohne sie aufzurufen
  10. 10
    BeispielWerte begrenzen, ohne Datensätze zu entfernen
  11. 11
    HerausforderungEine berechnete und umkodierte Spalte nachvollziehen
  12. 12
    ZusammenfassungDie Regel und Eingaben ohne Zuordnung prüfen
6

Daten ordnen und ihre Zusammenfassungen interpretieren

18 Schritte
Verfolge Sortier- und Rangregeln und berechne und interpretiere anschließend numerische und kategoriale Zusammenfassungen.

Speichere diese Einheit, um jede Interaktive Lektion Schritt für Schritt durchzugehen.

  1. 1
    EinführungDie Ansicht wählen, die die Frage beantwortet
  2. 2
    BeispielPunkte vor Namen sortieren
  3. 3
    TippEine Rangbindung an der Auswahlgrenze vollständig behalten
  4. 4
    HerausforderungReihenfolge der Bezeichnungen von der Wertereihenfolge unterscheiden
  5. 5
    BeispielDas Mittel der bei Rangbindungen belegten Plätze berechnen
  6. 6
    ErklärungZwischen Lücken und aufeinanderfolgenden Gruppen wählen
  7. 7
    HerausforderungEinen relativen Rang auslesen
  8. 8
    BeispielEine Wetterzusammenfassung erstellen
  9. 9
    ErklärungDen Nenner für die Streuung abstimmen
  10. 10
    BeispielQuartile und einen Mittelwert bei Schiefe auslesen
  11. 11
    HerausforderungEin arithmetisches Mittel anhand seiner Anzahl prüfen
  12. 12
    BeispielKategorien und Anteile zählen
  13. 13
    KernaussageDrei Fragen zu Werten unterscheiden
  14. 14
    HerausforderungEine Bedingung als Anteil zählen
  15. 15
    ErklärungEinen Zusammenhang genau beschreiben
  16. 16
    HerausforderungNach der Datenprüfung eine Matrix auslesen
  17. 17
    HerausforderungEine Zusammenfassung wählen und berichten
  18. 18
    ZusammenfassungDie Regel jeder Zusammenfassung sichtbar halten

Einstieg in pandas: Übungsaufgaben

50 Übungsfragen in 5 Sets

Set 1: Eine pandas-Tabelle auslesen und verwenden10 Übungsfragen

Frage 1 von 10

s = pd.Series([8, 13, 5], index=[2, 0, 1]). Was gibt s[0] zurück?
  1. 8
  2. 13
  3. 5
  4. 0
Antwort zeigenAntwort ausblenden
Antwort: B
Der ganzzahlige Schlüssel 0 wählt die Indexbezeichnung 0 aus, deren Wert 13 ist. Der erste angezeigte Wert ist 8, aber er steht an Position 0 und hat die Bezeichnung 2. Um den ersten Wert nach Position abzufragen, verwende s.iloc[0]; ganzzahlige Schlüssel in eckigen Klammern bleiben Bezeichnungen.

Frage 2 von 10

Eine Spalte enthält [4.0, NaN, 9.0] und stellt ganzzahlige Stückzahlen dar. Welcher Datentyp kann die Lücke erhalten und bekannte Anzahlen als Ganzzahlen speichern?
  1. int
  2. "bool"
  3. "str"
  4. "Int64"
Antwort zeigenAntwort ausblenden
Antwort: D
Int64 mit Fehlwertunterstützung und großem I speichert ganze Zahlen und stellt den fehlenden Eintrag als <NA> dar. Das gewöhnliche int64 hat kein Fehlwertkennzeichen und kann dieses NaN nicht umwandeln. Text würde eine Darstellung der Einträge erhalten, aber keine numerischen ganzzahligen Anzahlen speichern.

Frage 3 von 10

Eine Tabelle hat die eindeutigen Zeilenbezeichnungen [30, 10, 20]. Welche Zeile wählt df.loc[10] aus?
  1. Die Zeile mit Bezeichnung 10, nun an zweiter Stelle.
  2. Die erste Zeile, an Position null.
  3. Die letzte Zeile, an Position zwei.
  4. Die zehnte Zeile, falls sie existiert.
Antwort zeigenAntwort ausblenden
Antwort: A
loc interpretiert 10 als Indexbezeichnung und wählt daher die zweite angezeigte Zeile aus. Es zählt nicht zehn Positionen vorwärts. Die Position der Zeile kann sich nach dem Sortieren ändern, ihre Bezeichnung bleibt aber gleich, bis der Index ausdrücklich geändert wird.

Frage 4 von 10

df hat die Kategoriewerte ["A", "B", "A", "B"] und die Massen [3, 7, 9, 4]. Welche Bezeichnungen erfüllen beim Standardindex (df["category"] == "A") | (df["mass_kg"] > 6)?
  1. Nur Bezeichnung 2.
  2. Nur die Bezeichnungen 0 und 2.
  3. Die Bezeichnungen 0, 1 und 2.
  4. Nur die Bezeichnungen 1 und 2.
Antwort zeigenAntwort ausblenden
Antwort: C
Die ODER-Maske behält Zeilen, die mindestens eine der Bedingungen erfüllen. Die Zeilen 0 und 2 gehören zu Kategorie A und die Zeilen 1 und 2 liegen über 6 kg; ihre Vereinigung ist also 0, 1 und 2. Um nur Bezeichnung 2 zu behalten, müssten beide Bedingungen erfüllt sein; dafür würde & statt | verwendet.

Frage 5 von 10

Die Mengen sind [2.0, 5.0, NaN] und die Stückpreise [7.0, 3.0, 9.0]. Was ist das standardmäßige arithmetische Mittel ihrer zeilenweisen Produkte?
  1. Etwa 9.67
  2. 14.5
  3. 29.0
  4. NaN
Antwort zeigenAntwort ausblenden
Antwort: B
Die Produkte sind 14, 15 und NaN. Das standardmäßige arithmetische Mittel überspringt das fehlende Ergebnis, sodass 29 durch zwei dividiert wird und 14,5 ergibt. Eine Division durch alle drei Zeilen ergibt etwa 9,67 und würde einen unbekannten Umsatz so behandeln, als wäre sein Beitrag als null erfasst worden.

Frage 6 von 10

Eine numerische Spalte enthält [5.0, NaN, 2.0]. Wo erscheint NaN bei einer standardmäßigen absteigenden Sortierung nach Werten?
  1. Vor den beiden numerischen Werten.
  2. Zwischen den beiden numerischen Werten.
  3. Nach den beiden numerischen Werten.
  4. An derselben Position wie zuvor.
Antwort zeigenAntwort ausblenden
Antwort: C
Fehlende Werte stehen standardmäßig zuletzt, auch wenn Werte absteigend sortiert werden. Die Reihenfolge ist 5, 2, dann NaN. Das Umkehren der Sortierrichtung ändert die numerische Reihenfolge, verschiebt Lücken aber nicht an den Anfang; dafür ist na_position="first" nötig.

Frage 7 von 10

a = pd.Series([6, 9], index=["east", "west"]) und b = pd.Series([4, 7], index=["west", "east"]). Was sind (a + b).loc["east"] und (a + b).loc["west"]?
  1. 13 und 13
  2. 10 und 16
  3. 6 und 9
  4. 7 und 4
Antwort zeigenAntwort ausblenden
Antwort: A
Die Arithmetik mit Series ordnet Indexbezeichnungen zu. East kombiniert 6 mit 7 und west kombiniert 9 mit 4, sodass beide Summen 13 sind. Das Paaren der jeweils ersten angezeigten Einträge würde 10 und 16 ergeben, aber diese Einträge gehören zu unterschiedlichen Bezeichnungen und werden von pandas nicht gepaart.

Frage 8 von 10

Zwei Zeilen haben fehlende Zellen: Eine hat Lücken in drei Spalten, die andere in einer Spalte. Was gibt df.isna().any(axis=1).sum() zurück?
  1. 4
  2. 3
  3. 1
  4. 2
Antwort zeigenAntwort ausblenden
Antwort: D
any(axis=1) reduziert jede Zeile auf eine Antwort: ob sie mindestens eine Lücke enthält. Beide betroffenen Zeilen sind True, sodass die Summe 2 ist. Die Addition der Anzahlen fehlender Werte über alle Spalten würde vier Zellen ergeben, aber dieser Ausdruck zählt Zeilen nur einmal.

Frage 9 von 10

Die Namen sind ["Zoe", "Ari", "Bo", "Dee"] mit den Punktzahlen [8, 8, 10, 8]. Welche Namen erscheinen in welcher Reihenfolge, wenn nach Punktzahl absteigend und nach Name aufsteigend sortiert und anschließend die ersten zwei Zeilen ausgewählt werden?
  1. Bo, Zoe.
  2. Bo, Ari.
  3. Ari, Bo.
  4. Ari, Dee.
Antwort zeigenAntwort ausblenden
Antwort: B
Bos 10 setzt Bo an die erste Stelle. Die drei Punktzahlen von 8 werden dann nach Namen geordnet, wobei Ari vor Dee und Zoe steht. Die zweite ausgewählte Zeile ist also Ari. Würde Zoe an zweiter Stelle bleiben, wäre die Eingabereihenfolge bei der Rangbindung erhalten worden, statt den angegebenen zweiten Schlüssel anzuwenden.

Frage 10 von 10

s enthält ["A", "B", "C", "A", "B"]. Was sind nach s.replace({"C": "B"}) der Modalwert und seine relative Häufigkeit?
  1. B und 0,6.
  2. A und 0,4.
  3. B und 0,5.
  4. A und 0,6.
Antwort zeigenAntwort ausblenden
Antwort: A
Das Ersetzen von C durch B ergibt die Häufigkeiten A 2 und B 3, sodass B der Modalwert ist. Seine relative Häufigkeit beträgt drei von fünf, also 0,6. Der Nenner bleibt fünf, weil replace jede Beobachtung behält; die Transformation entfernt die ursprüngliche C-Zeile nicht.
Set 2: Die passende pandas-Operation wählen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Ein DataFrame hat 7 Zeilen und 4 Spalten. Was ist seine .size?
  1. 7
  2. 4
  3. 28
  4. 11
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Eine Tabelle mit 11 Zeilen hat eine Spalte mit 8 nicht fehlenden Werten. Wie viele Werte fehlen in dieser Spalte?
  1. 3
  2. 8
  3. 11
  4. 19
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

df hat fünf Zeilen. Welche Zeilenpositionen wählt df.iloc[1:4] aus?
  1. Die Positionen 1, 2, 3 und 4.
  2. Die Positionen 1, 2 und 3.
  3. Die Positionen 0, 1 und 2.
  4. Die Positionen 2, 3 und 4.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

In pandas 3 folgt auf chosen = df[df["active"]] die Zuweisung chosen["score"] = 0. Was geschieht mit df?
  1. Alle Punktzahlen werden null.
  2. Nur aktive Punktzahlen werden null.
  3. Nur inaktive Punktzahlen werden null.
  4. Die Punktzahlen bleiben unverändert.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Welche Bezeichnungen ergeben sich für die Werte [4, 6, 9] aus np.where(s >= 6, "large", "small")?
  1. ["small", "small", "large"]
  2. ["small", "large", "large"]
  3. ["large", "small", "small"]
  4. ["large", "large", "small"]
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Den Punktzahlen [90, 70, 90, 50] werden mit method="min", ascending=False Ränge zugewiesen. Welche Ränge ergeben sich in der ursprünglichen Zeilenreihenfolge?
  1. [1, 3, 1, 4]
  2. [1, 2, 1, 3]
  3. [1.5, 3, 1.5, 4]
  4. [2, 3, 2, 4]
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Eine Semikolondatei enthält code;mass_kg, gefolgt von 007;1,5 und 012;2,0. Welche Art des Ladens erhält die Codes und ermöglicht die numerische Berechnung der mittleren Masse?
  1. pd.read_csv("loads.csv", sep=";", decimal=".", dtype={"code": str})
  2. pd.read_csv("loads.csv", sep=";", decimal=",", dtype={"code": int})
  3. pd.read_csv("loads.csv", sep=";", decimal=",", dtype={"code": str})
  4. pd.read_csv("loads.csv", sep=",", decimal=",", dtype={"code": str})
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

df hat den Index [10, 20, 30] und die Umsätze [12.0, 24.0, 36.0]. Einer neuen Spalte wird df.loc[df["revenue"] > 15, "revenue"] / 2 zugewiesen. Was ist die standardmäßige Summe der neuen Spalte?
  1. 36.0
  2. 18.0
  3. NaN
  4. 30.0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Den Werten [12, 4, 12, 8] werden mit der Standardmethode und pct=True aufsteigend Ränge zugewiesen. Welchen relativen Rang erhält jeder Wert 12?
  1. 1.0
  2. 0.75
  3. 0.875
  4. 0.5
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

df.index ist ["a", "b", "a"]. Welchen Typ hat df.loc["a"]?
  1. Ein DataFrame mit zwei Zeilen.
  2. Eine Series mit nur der ersten Zeile.
  3. Eine Series mit der letzten Zeile.
  4. Ein Skalar, der passende Zeilen zählt.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 3: Zeilen, Datentypen und Berechnungen prüfen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

df hat einen unbenannten Index [40, 60]. Was macht df.reset_index() mit diesen Bezeichnungen?
  1. Es verwirft sie und behält alle anderen Spalten.
  2. Es behält sie als neue Zeilenbezeichnungen.
  3. Es verwendet sie zum Umbenennen der ersten Spalte.
  4. Es behält sie in einer Spalte index.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Eine Datei hat keine Kopfzeile und beginnt mit 501,Sensor. Wie sollte sie mit den Spalten id und device geladen werden, ohne den ersten Datensatz zu verlieren?
  1. pd.read_csv("devices.csv", header=0, names=["id", "device"])
  2. pd.read_csv("devices.csv", header=None, names=["id", "device"])
  3. pd.read_csv("devices.csv", skiprows=1, names=["id", "device"])
  4. pd.read_csv("devices.csv", index_col=0, names=["id", "device"])
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Welche Form hat df.loc[12:14, ["mass_kg"]] bei einem geordneten Index [11, 12, 13, 14]?
  1. (3, 1)
  2. (2, 1)
  3. (1, 3)
  4. (3,)
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

cutoff = 6. Wie kann query Zeilen auswählen, deren mass_kg diese Python-Variable übersteigt?
  1. df.query("mass_kg > cutoff")
  2. df.query("@mass_kg > cutoff")
  3. df.query("mass_kg > @cutoff")
  4. df.query("mass_kg > 6@")
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Was geschieht mit 14 in pd.Series([-2, 6, 14]).clip(lower=0, upper=10)?
  1. Der Wert wird zu 10.
  2. Der Wert wird entfernt.
  3. Der Wert wird zu 0.
  4. Der Wert bleibt 14.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Eine Text-Series lautet ["L", "M", "L", None]. Welchen Anteil weist das standardmäßige value_counts(normalize=True) L zu?
  1. 0.5
  2. 0.75
  3. 2.0
  4. Etwa 0.667
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

a = pd.Series([5, 8], index=["u", "v"]) und b = pd.Series([2, 4], index=["v", "w"]). Es sei c = a.add(b, fill_value=0). Was ist c[c > 4].sum()?
  1. 10.0
  2. 15.0
  3. 19.0
  4. 9.0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Ein Import mit sechs Zeilen hat sechs unterschiedliche nicht fehlende IDs und vier vorhandene Temperaturmesswerte mit einer Summe von 28 °C. Ein Bericht besagt, dass sich eine ID wiederholt und das arithmetische Mittel etwa 4,67 °C beträgt. Welcher korrigierte Bericht passt zu den Daten?
  1. Eine ID wiederholt sich; zwei Messwerte fehlen; Mittelwert 7 °C.
  2. IDs sind eindeutig; kein Messwert fehlt; Mittelwert 4,67 °C.
  3. IDs sind eindeutig; zwei Messwerte fehlen; Mittelwert 7 °C.
  4. Eine ID wiederholt sich; kein Messwert fehlt; Mittelwert 4,67 °C.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

df hat den Index [4, 8, 12] und die Gleitkommapreise [10.0, 20.0, 30.0]. Eine Maske wählt die Bezeichnungen 4 und 12 aus. Wie lauten die Preise in der ursprünglichen Zeilenreihenfolge nach df.loc[mask, "price"] = pd.Series([7.0, 9.0], index=[12, 4])?
  1. [7.0, 20.0, 9.0]
  2. [9.0, 20.0, 7.0]
  3. [9.0, NaN, 7.0]
  4. [NaN, 20.0, NaN]
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Die Punktzahlen sind [11, 9, 9, 6]. Wie viele Zeilen und welche kleinste Punktzahl gibt df.nlargest(2, "score", keep="all") zurück?
  1. 2 Zeilen; kleinste Punktzahl 9.
  2. 4 Zeilen; kleinste Punktzahl 6.
  3. 1 Zeile; kleinste Punktzahl 11.
  4. 3 Zeilen; kleinste Punktzahl 9.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 4: Mehrere Operationen gemeinsam nachvollziehen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

df = pd.DataFrame({"a": [2, 5], "b": [7, 1]}). Welche Werte gibt df.sum(axis=1) in Zeilenreihenfolge zurück?
  1. [9, 6]
  2. [7, 8]
  3. [3, 12]
  4. [2, 5, 7, 1]
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

s = pd.Series(["8", "bad", "2.5"]). Wie lauten die Werte nach pd.to_numeric(s, errors="coerce")?
  1. [8.0, 0.0, 2.5]
  2. [8, "bad", 2.5]
  3. [8.0, NaN, 2.5]
  4. [8, NaN, 2]
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Eine Tabelle hat den Index [7, 2, 9] und die x-Werte [4, 12, 8]. Es sei d = df.sort_values("x", ascending=False). Was ist d.iloc[:2]["x"].sum() - d.loc[7, "x"]?
  1. 20
  2. 8
  3. 24
  4. 16
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

Welche Werte der Massen [2, 5, 8] erfüllen .between(2, 8, inclusive="neither")?
  1. Sowohl 2 als auch 5.
  2. Nur 5.
  3. Sowohl 5 als auch 8.
  4. Alle drei Werte.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

df hat den Index [5, 9, 12], die Mengen [2, 3, 4] und die Preise [6, 5, 2]. Der DataFrame erhält eine Umsatzspalte, behält Umsätze über 10 und erhält dann pd.Series([20.0], index=[9]) als adjusted. Was ist das standardmäßige arithmetische Mittel von adjusted?
  1. 10.0
  2. 13.5
  3. 20.0
  4. NaN
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

Die Messwerte sind [3.0, 7.0, NaN, 8.0]. Was sind ihr standardmäßiges arithmetisches Mittel und ihre Anzahl nicht fehlender Werte?
  1. 4.5 und 4
  2. 6.0 und 3
  3. 6.0 und 4
  4. 4.5 und 3
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

df = pd.DataFrame({"a": [2, 6], "b": [5, 3]}, index=[8, 4]). Was sind nach df = df.T die Werte von df.shape und df.loc["b"].sum()?
  1. (2, 2) und 8
  2. (2, 2) und 9
  3. (2, 2) und 7
  4. (4, 1) und 8
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

Eine Series enthält "1,500", "800", "unknown", "200" und hat bisher keine Lücken. Was sind nach dem Entfernen der Kommas, einer numerischen Typumwandlung mit Fehlerersetzung und der Berechnung des standardmäßigen arithmetischen Mittels der Mittelwert und die Anzahl neuer Lücken?
  1. 625.0; eine neue Lücke.
  2. Etwa 833.33; keine neuen Lücken.
  3. 625.0; keine neuen Lücken.
  4. Etwa 833.33; eine neue Lücke.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Eine float64-Series enthält [2.0, NaN, 8.0, 5.0]. Was ist die Summe der durch s.notna() & (s != 5) & (s < 8) ausgewählten Werte?
  1. 10.0
  2. 7.0
  3. 2.0
  4. NaN
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

Die Messwerte sind [1, 2, 3, 4, 40] mm. Das arithmetische Mittel ist 10 mm und der Median ist 3 mm. Warum beschreibt der Median hier einen typischen Messwert besser?
  1. Der Median addiert die fünf Messwerte vor der Division.
  2. Das arithmetische Mittel gewichtet jeden Messwert anders.
  3. Der Median entspricht immer dem kleinsten Messwert.
  4. Der hohe Messwert von 40 mm zieht das Mittel nach oben.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Set 5: Probleme bei Ausrichtung und Zusammenfassung lösen10 Übungsfragen

Speichere diese Einheit, um jede Antwort zu sehen und jedes Set zu üben.

Frage 1 von 10

Eine Tabelle mit den eindeutigen IDs 81 und 82 als Index ist als df gespeichert. Die nächste Zeile lautet df.reset_index(). Warum schlägt df.loc[0] weiterhin fehl?
  1. Das Zurücksetzen behielt 81 als erste Bezeichnung.
  2. Der neue Index beginnt bei Position 1.
  3. Die zurückgegebene Tabelle wurde nicht zugewiesen.
  4. Die ID-Spalte verhindert die Abfrage nach Bezeichnung.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 2 von 10

Eine Datei verwendet Semikolons zwischen Feldern und Dezimalpunkte in Zahlen. Welche Option ändert das Feldtrennzeichen?
  1. decimal=";"
  2. sep=";"
  3. header=";"
  4. index_col=";"
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 3 von 10

Eine Tabelle mit vier Zeilen hat die Bezeichnungen [8, 3, 6, 1]. Welche Bezeichnungen bleiben in df.iloc[-2:][["x"]]?
  1. 8 und 3.
  2. 3 und 6.
  3. 1 und 6.
  4. 6 und 1.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 4 von 10

df hat den Index ["k", "m", "p"], a [4, 8, 12] und b [3, 1, 5]. Es sei d = df.loc[(df["a"] >= 8) & (df["b"] < 4), ["a", "b"]]. Was ist d.sum(axis=1).iloc[0]?
  1. 9
  2. 7
  3. 17
  4. 24
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 5 von 10

Die Gerätenamen sind ["Probe A", "sensor", None, "PROBE B"]. Welche Standardzeilenbezeichnungen erfüllen .str.contains("probe", case=False, na=False)?
  1. 0 und 3.
  2. Nur Bezeichnung 0.
  3. 0, 2 und 3.
  4. Nur Bezeichnung 3.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 6 von 10

df hat Standardbezeichnungen und die Gleitkommapreise [8.0, 12.0, 18.0]. Nach mask = df["price"] >= 12 folgt df.loc[mask, "price"] = pd.Series([9.0], index=[2]). Was gibt df["price"].count() zurück?
  1. 3
  2. 2
  3. 1
  4. 0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 7 von 10

Eine Tabelle hat den Standardindex und die Punktzahlen [60, 90, 90, 75] in Zeilenreihenfolge. Ein absteigender lückenloser Rang wird als place zugewiesen und die Tabelle wird stabil nach place aufsteigend sortiert. Welche ursprünglichen Zeilenbezeichnungen erscheinen zuerst?
  1. 0 und 3.
  2. 2 und 1.
  3. 1 und 3.
  4. 1 und 2.
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 8 von 10

s = pd.Series(["X", "Y", "X", "Z"]). Was sind nach t = s.map({"X": 4, "Y": 10}) die Werte von t.count() und t.mean()?
  1. 4 und 4.5
  2. 3 und 4.5
  3. 3 und 6.0
  4. 4 und 6.0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 9 von 10

Eine pandas-Series s enthält [2.0, 4.0, 6.0]. Was sind s.std() und np.std(s.to_numpy()), gerundet auf drei Nachkommastellen?
  1. 1.633 und 2.000
  2. 4.000 und 2.667
  3. 2.000 und 2.000
  4. 2.000 und 1.633
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Frage 10 von 10

df hat x [1, 2, 3, 4], y [100, 6, 4, 2] und z [5, 5, 5, 5]. Welche Werte erscheinen nach df.loc[df["x"] > 1, ["x", "y", "z"]].corr() für x mit y und für z mit sich selbst?
  1. 1.0 und NaN
  2. -1.0 und 1.0
  3. -1.0 und NaN
  4. -1.0 und 0.0
Antwort zeigenAntwort ausblenden

Speichere diese Einheit, um diese Antwort zu sehen.

Hängst du bei deiner eigenen Aufgabe fest? Hausaufgabenhilfe

Schlüsselbegriffe

91 Schlüsselbegriffe, jeweils mit Definition

A

Abfragevariable
Eine Abfragevariable ist ein externer Python-Wert, auf den mit vorangestelltem @ verwiesen wird, sodass er sich von Spaltennamen unterscheidet.
Mit limit = 5 vergleicht query("unit_price > @limit") Preise mit diesem Python-Wert.
Absolute Häufigkeiten
Absolute Häufigkeiten geben an, wie oft jeder unterschiedliche Wert vorkommt, meist vom häufigsten zum seltensten geordnet.
Die absoluten Häufigkeiten der Kategorien zeigen, ob die meisten erfassten Bestellungen zu Stationery, Home oder Bags gehören.
Achse
Eine Achse ist eine Richtung in einer pandas-Tabelle: Achse 0 verläuft entlang der Zeilen und Achse 1 für zeilenweise Reduktionen entlang der Spalten.
df.sum(axis=1) addiert die ausgewählten numerischen Spalten innerhalb jeder Zeile und ergibt eine Summe pro Zeile.
Aggregation
Eine Aggregation reduziert eine Sammlung von Werten auf zusammenfassende Ergebnisse; mit agg lassen sich mehrere Kennwerte gemeinsam anfordern.
agg(["mean", "max"]) gibt für jede ausgewählte numerische Spalte zwei unterschiedliche Zusammenfassungen aus.
Anzahl nicht fehlender Werte
Die Anzahl nicht fehlender Werte ist die Anzahl vorhandener Einträge in einer Spalte, die mit der Zeilenanzahl verglichen werden kann, um Lücken zu erkennen.
Fünf nicht fehlende Mengenangaben unter sechs Bestellungen bedeuten, dass für eine Bestellung keine Menge erfasst wurde.
Anzahl unterschiedlicher Werte
Die Anzahl unterschiedlicher Werte ist die Zahl verschiedener vorhandener Werte in einer Spalte, die nunique mit seinen Standardeinstellungen zurückgibt.
Sechs unterschiedliche erfasste IDs unter sechs Zeilen zeigen, dass die ID-Spalte keine wiederholten Werte hat.
Arbeitsverzeichnis
Das Arbeitsverzeichnis ist der Ordner, von dem aus Python relative Pfade beim Öffnen von Dateien wie einer CSV-Datei auflöst.
Auch ein gültiger Dateiname kann einen FileNotFoundError auslösen, wenn Python in einem anderen Ordner ausgeführt wird.
Arithmetisches Mittel
Das arithmetische Mittel ist die Summe erfasster numerischer Werte dividiert durch ihre Anzahl, wobei pandas fehlende Werte standardmäßig überspringt.
Bei einer mittleren Menge, die auf fünf erfassten Anzahlen beruht, darf nicht durch alle sechs Bestellzeilen dividiert werden.
assign
Die Methode assign gibt einen DataFrame mit neuen oder ersetzten Spalten zurück und lässt ihre Eingabetabelle unverändert.
Ein assign-Lambda-Ausdruck kann an dieser Stelle einer Methodenkette aus revenue eine Steuerspalte berechnen.
at
Der Indexer at wählt eine einzelne Zelle anhand ihrer Zeilen- und Spaltenbezeichnungen aus und bietet eine kurze Form der skalaren Abfrage nach Bezeichnung.
orders.at[2, "product"] liest das Produkt bei Bezeichnung 2 in einer Bestelltabelle mit Standardindex aus.
Aufsteigende Reihenfolge
Aufsteigende Reihenfolge setzt kleinere Werte vor größere und ist die Standardrichtung beim Sortieren von Werten und Indizes in pandas.
Setze ascending=False, wenn eine Ergebnistabelle die höchsten Punktzahlen zuerst anzeigen soll.
Ausrichtung anhand von Indexbezeichnungen
Die Ausrichtung anhand von Indexbezeichnungen ist die Zuordnung von pandas-Werten bei Operationen anhand ihrer Indexbezeichnungen, auch wenn ihre Positionen unterschiedlich sind.
Bei der Addition von Series mit unterschiedlicher Städtereihenfolge wird jede Stadt dennoch mit derselben Stadt kombiniert.

B

Bedingte Aktualisierung
Eine bedingte Aktualisierung weist Zellen in Zeilen, die anhand einer Bedingung ausgewählt wurden, neue Werte zu, typischerweise über eine einzige loc-Zuweisung.
df.loc[mask, "price"] *= 0.9 reduziert die Preise genau der Zeilen, die von der Maske für die Preisaktualisierung ausgewählt wurden.
Bedingte Auswahl
Die bedingte Auswahl mit np.where wählt für True-Einträge einer Bedingung eine Ausgabe und für False-Einträge eine andere.
Ein Preisschwellenwert kann die Bezeichnungen high und low erzeugen, ohne eine Python-Schleife über Zeilen zu schreiben.
Beobachtung
Eine Beobachtung ist der einzelne Fall, der in einer Zeile einer aufgeräumten Tabelle erfasst wird, wobei seine Variablen in Spalten stehen.
Eine Zeile erfasst eine Bestellung, auch wenn ihr Produkt in der Zeile einer anderen Bestellung ebenfalls vorkommt.
Berechnete Spalte
Eine berechnete Spalte speichert aus vorhandenen Daten berechnete Werte, etwa durch zeilenweise Arithmetik zwischen zwei numerischen Spalten.
Die Multiplikation von quantity mit unit_price erzeugt revenue und behält jedes Ergebnis bei seiner Bestellung.
between
Die Methode between prüft, ob jeder Wert zwischen einer unteren und einer oberen Schranke liegt, und schließt standardmäßig beide Endpunkte ein.
between(5, 20, inclusive="left") schließt 5 ein, aber 20 aus dem Preisintervall aus.
Bezeichnungsbasierter Slice
Ein bezeichnungsbasierter Slice wählt einen Bereich anhand von Anfangs- und Endbezeichnung aus und schließt bei einem passend geordneten Index beide Endpunkte ein.
Bei einem Index aus Bestellbezeichnungen schließt .loc[1002:1004] die drei Bestellbezeichnungen 1002, 1003 und 1004 ein.
Boolesche Maske
Eine boolesche Maske ist eine Folge von Wahrheitswerten, die angibt, welche Einträge eine Bedingung erfüllen und ausgewählt werden sollen.
Der Vergleich jedes Preises mit 10 erzeugt ein True oder False für die Zeile jeder Bestellung.
Boolesche Reduktion
Eine boolesche Reduktion fasst viele Wahrheitswerte zu einem Ergebnis zusammen, etwa ob irgendein Eintrag oder alle Einträge True sind.
Das .any() einer Maske kann beantworten, ob mindestens einer Bestellung eine Mengenangabe fehlt.
Broadcasting eines Skalars
Broadcasting eines Skalars wendet einen angegebenen Wert in einer gesamten Spaltenoperation an oder füllt eine angesprochene Spalte mit diesem Wert.
Die Division jedes Umsatzes durch dieselbe bekannte Summe ergibt den Anteil jeder Bestellung an dieser Summe.

C

Copy-on-Write
Copy-on-Write ist ein Verhalten von pandas 3, bei dem sich eine abgeleitete Series oder ein abgeleiteter DataFrame bei Wertänderungen unabhängig verhält.
Das Bearbeiten einer gespeicherten Auswahl von Home-Bestellungen aus einer Bestelltabelle ändert diese Auswahl und lässt die Bestelltabelle unverändert.
CSV
CSV ist ein Textformat für tabellarische Datensätze, deren Felder durch ein Trennzeichen, meist Kommas, getrennt sind und die oft eine Kopfzeile haben.
Ein leeres Feld zwischen zwei Trennzeichen kann eine nicht erfasste Menge in einer Bestellung darstellen.

D

DataFrame
Ein DataFrame ist eine zweidimensionale pandas-Tabelle, deren Spalten einen Zeilenindex teilen und jeweils einen anderen Datentyp haben können.
Eine Bestelltabelle speichert Produkttext, numerische Mengen und Preise in getrennten Spalten.
Datentyp (dtype)
Ein Datentyp ist der gespeicherte Typ einer Series oder Spalte und bestimmt, welche Werte sie aufnehmen und welche Operationen sie unterstützen kann.
Eine Mengenspalte kann float64 verwenden, wenn bei einem Datensatz eine leere Mengenangabe als NaN eingelesen wird.
dt-Accessor
Der dt-Accessor stellt Datums- und Zeitbestandteile oder Methoden für eine Series mit datums- und zeitartigen Werten bereit.
Nach der Datumsumwandlung gibt .dt.day_name() den Wochentag jedes Bestelldatums zurück.
Dublettenprüfung
Eine Dublettenprüfung markiert wiederholte Zeilen oder wiederholte Werte in ausgewählten Spalten und lässt gewöhnlich das erste Auftreten unmarkiert.
In einer Produktspalte, die Notebook mehrfach aufführt, markiert duplicated(subset="product") spätere Notebook-Einträge, auch wenn sich alle Bestell-IDs unterscheiden.

E

Eindeutigkeit des Index
Eindeutigkeit des Index bedeutet, dass jede Zeilenbezeichnung nur einmal vorkommt und damit als eindeutige Zeilenkennung dienen kann.
Prüfe .index.is_unique, bevor du erwartest, dass eine Bestell-ID genau eine Zeile zurückgibt.
Elementweises ODER
Elementweises ODER verknüpft Masken mit | und macht eine Zeile True, wenn mindestens eine der beiden entsprechenden Bedingungen True ist.
Eine Auswahl von Home-Artikeln oder Preisen über 10 kann teure Artikel aus einer anderen Kategorie einschließen.
Elementweises UND
Elementweises UND verknüpft Masken mit & und macht eine Zeile nur dann True, wenn beide entsprechenden Bedingungen True sind.
Eine Home-Bestellung, die mehr als 10 kostet, muss sowohl den Kategorie- als auch den Preisvergleich erfüllen.
Ersetzung
Eine Ersetzung ändert angegebene Werte und erhält nicht aufgeführte Werte, wie bei einer replace-Operation auf einer Series.
In einer Kategoriespalte mit Bags, Home und Stationery lässt das Ersetzen von Bags durch Luggage die Bezeichnungen Home und Stationery unverändert.

F

Fehlwertkennzeichen
Ein Fehlwertkennzeichen ist ein Eintrag oder gespeicherter Wert, der anzeigt, dass ein Wert fehlt und nicht bekannt ist.
na_values=["-"] teilt dem CSV-Leser mit, dass ein Bindestrich in der Datei einen fehlenden Eintrag darstellt.
Filtern
Filtern behält Beobachtungen, die eine Zeilenbedingung erfüllen, und erhält dabei ihre Werte und bestehenden Indexbezeichnungen.
Nach dem Behalten von Stationery-Bestellungen können die ursprünglichen Bezeichnungen Lücken aufweisen, statt wieder bei null zu beginnen.
Form (Shape)
Die Form eines DataFrames ist ein Tupel aus zwei Einträgen, das zuerst die Zeilenanzahl und dann die Spaltenanzahl angibt.
Eine Tabelle mit sechs Bestellungen und vier erfassten Variablen hat die Form (6, 4) und 24 Zellen.

G

Ganzzahldatentyp mit Fehlwertunterstützung
Ein Ganzzahldatentyp mit Fehlwertunterstützung speichert ganze Zahlen zusammen mit fehlenden Einträgen, die in pandas Int64 als dargestellt werden.
Eine Spalte mit Anzahlen und einer Lücke kann "Int64" verwenden, statt bei der Umwandlung in das gewöhnliche int fehlzuschlagen.
Gleitkommafehler
Ein Gleitkommafehler ist eine kleine Abweichung, die durch das Darstellen und Berechnen von Dezimalwerten in binärer Speicherung entsteht.
Eine Steuerberechnung kann 1.9000000000000001 anzeigen; dieser Wert kann auf zwei Nachkommastellen gerundet werden.

I

iat
Der Indexer iat wählt eine einzelne Zelle anhand ihrer Zeilen- und Spaltenpositionen ab null aus, ohne diese als Bezeichnungen zu interpretieren.
orders.iat[2, 2] liest die Zelle in der dritten Zeile und dritten Spalte einer Bestelltabelle aus.
iloc
Der Indexer iloc wählt Zeilen und Spalten anhand ganzzahliger Positionen ab null aus, unabhängig von ihren Bezeichnungen oder Namen.
.iloc[-1] gibt die letzte Zeile zurück, auch wenn ihre Indexbezeichnung eine Bestellnummer wie 1006 ist.
Index
Ein Index ist die Sammlung von Bezeichnungen einer Series oder der Zeilen eines DataFrames, die zur Identifizierung von Einträgen dient.
Mit einem Städteindex kann population["Lima"] den Wert einer Stadt anfordern, ohne ihre Position zu kennen.
isin
Die Methode isin erstellt eine Zugehörigkeitsmaske und prüft, ob jeder Wert in einer angegebenen Sammlung erlaubter Werte vorkommt.
Die Zugehörigkeit einer Kategorie zu ["Home", "Bags"] ersetzt zwei durch ODER verknüpfte Gleichheitsvergleiche.
isna
Die Methode isna erkennt fehlende Einträge und erzeugt an jeder Position True für Lücken und False für vorhandene Werte.
Eine isna-Maske kann die Bestellung ohne Mengenangabe auswählen, ohne etwas mit NaN zu vergleichen.

K

Kategorialer Datentyp
Der kategoriale Datentyp stellt wiederholte Bezeichnungen durch eine Menge von Kategorien und deren Codes dar und spart bei großen Tabellen meist Speicher.
Eine ungeordnete kategoriale Spalte lässt min() nicht zu, auch wenn ihre angezeigten Bezeichnungen gewöhnlicher Text sind.
Kopfzeile
Eine Kopfzeile ist die Zeile mit den Spaltennamen einer Tabelle, die pandas normalerweise aus der ersten Zeile einer CSV-Datei einliest.
Verwende header=None, wenn die erste Zeile einen tatsächlichen Datensatz enthält, der in den Daten bleiben muss.
Korrelationsmatrix
Eine Korrelationsmatrix hält paarweise Korrelationen fest und ist symmetrisch; für variierende numerische Spalten beträgt die Korrelation mit sich selbst 1.
Der Eintrag für Niederschlag und Temperatur entspricht dem Eintrag für Temperatur und Niederschlag; eine konstante Spalte ergibt dagegen NaN.
Kumulative Summe
Eine kumulative Summe ist eine fortlaufende Summe mit einem aufsummierten Wert an jeder Position, die von der Methode cumsum zurückgegeben wird.
Kumulative Summen des täglichen Niederschlags zeigen, wie viel Regen bis einschließlich jedes Wochentags gefallen ist.

L

loc
Der Indexer loc wählt Zeilen und Spalten anhand von Bezeichnungen aus und akzeptiert einzelne Bezeichnungen, Listen, bezeichnungsbasierte Slices und boolesche Masken.
Ein Bestell-ID-Index ermöglicht es, mit .loc[1004, "product"] das Produkt einer bestimmten Bestellung auszuwählen.
Lückenloser Rang
Ein lückenloser Rang gibt Gruppen unterschiedlicher Werte aufeinanderfolgende Ränge, sodass Rangbindungen vor der nächsten Gruppe keine Lücken lassen.
Zwei Gewinner mit gleicher Punktzahl erhalten Rang 1 und die nächste andere Punktzahl erhält bei der Methode dense Rang 2.

M

Median
Der Median ist der mittlere Wert einer geordneten numerischen Datenreihe; bei einer geraden Anzahl erfasster Werte wird das arithmetische Mittel der beiden mittleren Werte gebildet.
Ein sehr nasser Tag kann das arithmetische Mittel des wöchentlichen Niederschlags über den Median ziehen, der nahe am typischen trockenen Tag bleibt.
Minimaler Rang
Ein minimaler Rang gibt Werten mit Rangbindung den kleinsten belegten Rang und lässt Lücken für die anderen von der Rangbindung belegten Plätze.
Wenn zwei Werte den ersten Rang belegen, erhält der nächste andere Wert bei der Methode min Rang 3.
Mittlerer Rang
Ein mittlerer Rang gibt jedem Wert mit Rangbindung das arithmetische Mittel der Positionen, die seine Gruppe in der sortierten Reihenfolge belegt.
Zwei gleiche höchste Punktzahlen auf den Plätzen 1 und 2 erhalten beide den absteigenden Rang 1,5.
Modalwert
Ein Modalwert ist ein Wert mit der größten Häufigkeit in einem Datensatz; pandas gibt eine Series zurück, weil mehrere Modalwerte gleich häufig sein können.
Wenn A und B beide dreimal vorkommen und kein Wert häufiger erscheint, gibt mode beide Bezeichnungen zurück.

N

NaN
NaN ist ein Fehlwertkennzeichen in Gleitkommadaten und standardmäßigen Textdaten von pandas 3; es ist keine bekannte numerische Null.
Eine leere Mengenangabe kann dazu führen, dass der berechnete Umsatz fehlt, während bekannte Umsätze nutzbar bleiben.
Negativer Positionsindex
Ein negativer Positionsindex zählt vom Ende einer Achse rückwärts, wobei −1 ihren letzten verfügbaren Eintrag bezeichnet.
Die Position −2 wählt unabhängig vom Spaltennamen die vorletzte Spalte aus.

P

Pearson-Korrelation
Die Pearson-Korrelation misst Richtung und Stärke eines linearen Zusammenhangs zwischen numerischen Variablen auf einer Skala von −1 bis 1.
Ein negativer Koeffizient zwischen Temperatur und Niederschlag beschreibt die Tendenz, dass an wärmeren Tagen weniger Regen fällt.
Platzierung fehlender Werte
Die Platzierung fehlender Werte legt fest, wo Lücken in einem sortierten Ergebnis erscheinen, unabhängig von der Richtung der numerischen Sortierung.
Auch eine absteigende Sortierung setzt NaN zuletzt, sofern nicht ausdrücklich na_position="first" angefordert wird.
Positionsbasierter Slice
Ein positionsbasierter Slice wählt einen Bereich von einer eingeschlossenen Anfangsposition bis zur angegebenen Endposition aus, ohne diese einzuschließen.
.iloc[1:3] gibt die Positionen 1 und 2 zurück und kann sich von einem loc-Slice mit eingeschlossenem Endpunkt unterscheiden.

Q

Quantil
Ein Quantil kennzeichnet eine Position in geordneten Daten für einen Anteil zwischen null und eins; pandas interpoliert standardmäßig.
quantile(0.25) kann für eine Temperaturspalte ein unteres Quartil zwischen zwei gemessenen Temperaturen ergeben.
query
Die Methode query filtert einen DataFrame mithilfe eines Zeichenkettenausdrucks, in dem Spaltennamen direkt auf ihre Werte verweisen.
query("quantity >= 2 and unit_price < 5") kann einen kombinierten Bestellfilter klar ausdrücken.

R

Rang
Ein Rang ist eine Zahl, die den Platz eines Werts in geordneten Daten beschreibt und der ursprünglichen Zeile zugeordnet wird, ohne sie neu anzuordnen.
Absteigende Ränge ermöglichen es, dass der ursprüngliche Datensatz jeder Person einen Platz anhand ihrer Punktzahl trägt.
Rang nach Auftretensreihenfolge
Ein Rang nach Auftretensreihenfolge löst Rangbindungen anhand ihrer Reihenfolge in der Eingabe auf und gibt bei der Methode first jedem betroffenen Eintrag einen eigenen Rang.
Das Umordnen von Zeilen mit Rangbindung kann ihre Ränge nach der Methode first ändern, obwohl ihre Punktzahlen unverändert sind.
RangeIndex
Ein RangeIndex ist eine standardmäßig vergebene Folge ganzzahliger Zeilenbezeichnungen, die typischerweise bei null beginnt und jeweils um eins steigt.
Nach dem Filtern ersetzt reset_index(drop=True) die erhaltenen Bezeichnungen durch einen neuen Standardindex.
Relative Häufigkeit
Eine relative Häufigkeit ist die Anzahl eines Werts dividiert durch die Anzahl aller einbezogenen Einträge und drückt einen Anteil aus.
Drei Stationery-Einträge unter sechs vorhandenen Kategorien ergeben 0,5 oder nach Multiplikation mit 100 einen Anteil von 50 %.
Relativer Rang
Ein relativer Rang drückt einen Rang als Anteil aus; die standardmäßige Rangvergabe mit Mittelwert dividiert durch die Anzahl der eingestuften Werte.
Ein mittlerer Rang von 4,5 unter fünf nicht fehlenden Werten ergibt einen relativen Rang von 0,9.
rename
Die Methode rename gibt ein Objekt zurück, in dem angegebene Bezeichnungen gemäß einer Zuordnung geändert sind, während andere Bezeichnungen bestehen bleiben.
rename(columns={"unit_price": "price"}) ändert den Namen einer Spalte, ohne ihre Werte zu ändern.
reset_index
Die Methode reset_index gibt eine Tabelle mit einem neuen Standardzeilenindex zurück und behält den alten Index als Spalte, sofern er nicht verworfen wird.
Ein benannter Bestell-ID-Index wird nach dem einfachen reset_index() wieder zu einer Spalte order_id.

S

Series
Eine Series ist eine eindimensionale pandas-Struktur, die jeden gespeicherten Wert einer Indexbezeichnung zuordnet und einen Datentyp hat.
Eine Niederschlags-Series kann Messwerte in Millimetern den Bezeichnungen Mon, Tue und Wed zuordnen.
set_index
Die Methode set_index gibt eine Tabelle zurück, in der eine ausgewählte Spalte als Zeilenbezeichnungen verwendet und standardmäßig aus den Spalten entfernt wird.
orders.set_index("order_id") macht eine Bestellnummer zur Bezeichnung für spätere Zeilenabfragen.
Skalar
Ein Skalar ist ein einzelner Wert, der zurückgegeben wird, wenn eine Auswahl eine Zelle statt einer Series oder eines DataFrames identifiziert.
Die Auswahl einer eindeutigen Zeilenbezeichnung und eines Spaltennamens gibt einen Produktnamen als Skalar zurück.
Skalare Zuweisung
Eine skalare Zuweisung füllt alle angesprochenen Zellen mit einem angegebenen Wert, ohne einen separaten Wert für jede ausgewählte Zeile zu benötigen.
Die Zuweisung von null an eine loc-Auswahl gibt jeder ausgewählten Zelle null und lässt andere Zeilen unverändert.
Sortierschlüssel
Ein Sortierschlüssel ist die Spalte oder Bezeichnung, deren Werte die Reihenfolge steuern; bei mehreren Schlüsseln haben frühere Vorrang.
Punkte können der primäre Sortierschlüssel sein, während Namen Datensätze mit gleicher Punktzahl ordnen.
Spalte
Eine Spalte ist eine bezeichnete Folge, die eine Variable in einem DataFrame darstellt und als Series mit eigenem Datentyp gespeichert wird.
Die Mengenspalte enthält für jede Bestellung in der Tabelle eine Anzahl oder einen fehlenden Eintrag.
Spaltenauswahl
Eine Spaltenauswahl bestimmt, welche Variablen eine Auswahl über zwei Achsen zurückgeben soll; sie verwendet Bezeichnungen in loc und Positionen in iloc.
Eine Maske kann die Zeilen wählen, während ["product", "unit_price"] die anzuzeigenden Spalten auswählt.
Spearman-Rangkorrelation
Die Spearman-Rangkorrelation misst einen Zusammenhang über Ränge und eignet sich für Zusammenhänge, die durchgehend steigen oder fallen.
Ein stetig steigender gekrümmter Zusammenhang lässt sich über Ränge beschreiben, ohne eine Gerade anzunehmen.
Stabile Sortierung
Eine stabile Sortierung erhält bei der entsprechenden Einstellung für eine Sortierung nach einer Spalte die ursprüngliche relative Reihenfolge von Einträgen mit gleichem Sortierwert.
kind="stable" behält zwei gleiche Punktzahlen in ihrer bisherigen Reihenfolge, statt eine neue Regel für den Gleichstand festzulegen.
Standardabweichung
Die Standardabweichung misst die Streuung um das arithmetische Mittel in den ursprünglichen Einheiten; pandas verwendet standardmäßig den Stichprobennenner.
Die Standardabweichung der Temperatur wird in Grad Celsius gemessen, anders als die Varianz in Quadratgrad.
str-Accessor
Der str-Accessor stellt vektorisierte Zeichenkettenmethoden für eine Text-Series bereit, darunter die Umwandlung in Großbuchstaben und das Zählen von Zeichen.
orders["product"].str.len() berechnet für jedes erfasste Produkt eine Namenslänge.

T

Textmusterabgleich
Ein Textmusterabgleich prüft bei jedem Texteintrag ein Zeichenkettenmuster, etwa durch die Suche innerhalb von Werten mit str.contains.
Die Suche nach "note" mit case=False trifft auf Notebook zu, obwohl dessen N großgeschrieben ist.
Top-n-Auswahl
Eine Top-n-Auswahl ruft Zeilen mit den größten Werten ab und kann alle gleichen Werte an der Auswahlgrenze einbeziehen, wenn keep auf all gesetzt ist.
nlargest(1, "points", keep="all") gibt zwei Zeilen zurück, wenn zwei Personen dieselbe höchste Punktzahl haben.
Trennzeichen
Ein Trennzeichen ist das Zeichen, das Felder in einem Textdatensatz trennt und beim Einlesen einer CSV-Datei in pandas mit sep angegeben wird.
Eine durch Semikolons getrennte Datei benötigt sep=";", auch wenn Zahlen in ihren Feldern Dezimalkommas verwenden.
Typinferenz
Typinferenz ist die Wahl des Datentyps einer Spalte durch pandas anhand ihrer Eingabewerte, wenn kein Datentyp ausdrücklich angegeben wird.
Die numerische Typinferenz kann die Kennung "001" in 1 umwandeln, sofern ihr Datentyp nicht als Text festgelegt wird.
Typumwandlung
Eine Typumwandlung ändert Werte in einen gewählten Datentyp, sodass die Spalte die Operationen unterstützt, die ihre Bedeutung erfordert.
Wandle Datumstext um, bevor du .dt.month anforderst, und weise die umgewandelte Series dann zurück.
Typumwandlung mit Fehlerersetzung
Eine numerische Typumwandlung mit Fehlerersetzung wandelt einlesbare numerische Werte um und ersetzt ungültige Einträge durch fehlende Werte, statt anzuhalten.
Die Umwandlung von "7", "unknown", "2.5" mit errors auf coerce erzeugt einen neuen fehlenden Eintrag.

V

Varianz
Die Varianz misst die mittlere quadrierte Abweichung vom arithmetischen Mittel mit dem gewählten Nenner; in pandas gilt standardmäßig ddof=1.
Bevor du eine Streuungsberechnung aus pandas mit den Standardeinstellungen von NumPy vergleichst, musst du ddof angleichen.
Vektorisierte Operation
Eine vektorisierte Operation wendet einen Ausdruck auf eine ganze Folge oder Spalte von Werten an, ohne eine ausdrückliche Python-Schleife über Zeilen zu verwenden.
Die Multiplikation einer Preis-Series mit 0,9 reduziert jeden erfassten Preis um denselben Anteil.
Verkettete Zuweisung
Eine verkettete Zuweisung versucht, Werte über aufeinanderfolgende Auswahlen zu aktualisieren, und ändert in pandas 3 niemals die ursprüngliche Tabelle.
Eine gefilterte Tabelle mit anschließender weiterer Spaltenauswahl kann nicht zur Aktualisierung ihrer Ursprungstabelle dienen.
Vorschau
Eine Vorschau ist eine kleine angezeigte Auswahl von Datensätzen, mit der sichtbare Werte und der Aufbau vor der Analyse der ganzen Tabelle geprüft werden.
Mit head(3) kannst du die Kopfzeile und die ersten drei Datensätze prüfen, ohne jede Zeile anzuzeigen.

W

Wertbegrenzung (Clipping)
Die Wertbegrenzung begrenzt Werte an angegebenen unteren oder oberen Schranken und erhält jede Beobachtung, statt Zeilen außerhalb des Bereichs zu entfernen.
Die Begrenzung von Stückpreisen auf 20 ändert einen Wert von 35 auf 20 und behält denselben Bestelldatensatz.

Z

Zeilenweises Anwenden mit apply
Zeilenweises Anwenden mit apply übergibt mit axis=1 jede DataFrame-Zeile an eine Funktion, sodass die Funktion mehrere Spalten auslesen kann.
Eine eigene Zeilenfunktion kann quantity und price verwenden, obwohl die Spaltenmultiplikation für den Umsatz schneller ist.
Zufallsstichprobe
Eine Zufallsstichprobe ist eine durch ein Zufallsverfahren getroffene Auswahl; ein festes random_state macht die Auswahl bei denselben Daten reproduzierbar.
sample(3, random_state=0) ist nützlich, um Zeilen außerhalb des Anfangs oder Endes einer Tabelle zu prüfen.
Zuordnung mit einem Dictionary
Eine Zuordnung mit einem Dictionary übersetzt jede Eingabe durch das Nachschlagen eines Schlüssel-Wert-Paars und macht bei map eine nicht aufgeführte Eingabe zu einem fehlenden Wert.
Um jeder Kategorie einen Code zuzuordnen, wird für jede Kategorie, deren Code bekannt bleiben soll, ein Schlüssel benötigt.
Zusammenhang
Ein Zusammenhang ist eine beobachtete Beziehung zwischen Variablen; eine Korrelation beschreibt ihn, ohne einen kausalen Mechanismus nachzuweisen.
Die Korrelation zwischen Temperatur und Niederschlag einer Woche zeigt nicht, dass eine Temperaturänderung eine Niederschlagsänderung verursachen würde.

Über diese Einheit

Von StudeliFehler melden

Erstelle deine eigenen Lernmaterialien

Mach aus deinen Notizen, Folien und Dokumenten Lernleitfäden, Übungsfragen, Karteikarten und 6 weitere Tools.

Jetzt starten