Pandas (stilisiert als pandas) ist eine Softwarebibliothek, die für die Programmiersprache Python zur Datenmanipulation und -analyse geschrieben wurde. Insbesondere bietet sie Datenstrukturen und Operationen zur Manipulation numerischer Tabellen und Zeitreihen. Es handelt sich um freie Software, die unter der Drei-Klausel-BSD-Lizenz veröffentlicht wird. Der Name leitet sich von dem Begriff „Panel Data“ ab, einem ökonometrischen Begriff für Datensätze, die Beobachtungen über mehrere Zeitperioden für dieselben Individuen umfassen, sowie als Wortspiel auf „Python Data Analysis“. Wes McKinney begann mit dem Aufbau dessen, was später Pandas werden sollte, bei AQR Capital, während er dort von 2007 bis 2010 als Forscher tätig war.
Die Entwicklung von Pandas führte in Python viele vergleichbare Funktionen für die Arbeit mit DataFrames ein, die in der Programmiersprache R etabliert waren. Die Bibliothek ist auf einer anderen Bibliothek, NumPy, aufgebaut.
Geschichte
Der Entwickler Wes McKinney begann 2008 bei AQR Capital Management mit der Arbeit an Pandas, aus der Notwendigkeit eines leistungsstarken, flexiblen Werkzeugs für quantitative Analysen von Finanzdaten. Bevor er AQR verließ, konnte er das Management 2009 davon überzeugen, ihm die Veröffentlichung der Bibliothek als Open Source zu gestatten. Ein anderer AQR-Mitarbeiter, Chang She, kam 2012 als zweiter Hauptbeiträger zur Bibliothek hinzu. 2015 wurde Pandas als finanziell gefördertes Projekt von NumFOCUS aufgenommen, einer 501(c)(3)-gemeinnützigen Organisation in den USA.
Datenmodell
Pandas ist um Datenstrukturen namens Series und DataFrames aufgebaut. Daten für diese Sammlungen können aus verschiedenen Dateiformaten importiert werden, wie etwa kommagetrennte Werte, JSON, Parquet, SQL-Datenbanktabellen oder -abfragen sowie Microsoft Excel.
Series
Eine Series ist ein eindimensionales, array-ähnliches Objekt, das eine Sequenz von Werten zusammen mit einem zugehörigen Satz von Beschriftungen, genannt Index, speichert. Sie ist auf NumPys Array aufgebaut und bietet viele ähnliche Funktionen, verwendet jedoch anstelle impliziter ganzzahliger Positionen explizite Indexbeschriftungen vieler Datentypen. Eine Series kann aus Python-Listen, Wörterbüchern oder NumPy-Arrays erstellt werden. Wenn kein Index angegeben wird, weist pandas automatisch einen Standard-Ganzzahlindex von 0 bis n-1 zu, wobei n die Anzahl der Elemente in der Series ist.
Um einen Wert oder eine Liste von Werten aus einer Series abzurufen, verwenden Sie ihren Index oder eine Liste von Indizes. Series können arithmetisch verwendet werden, wie in der Anweisung series_3 = series_1 + series_2. Dies richtet Datenpunkte mit entsprechenden Indexwerten in series_1 und series_2 aus (ähnlich einem Join in der relationalen Algebra) und addiert sie dann, um neue Werte in series_3 zu erzeugen. Eine Series hat verschiedene Attribute, wie name (Name der Series), dtype (Datentyp der Werte), shape (Anzahl der Zeilen), values und index. Sie können in vielen der gleichen Operationen wie NumPy-Arrays verwendet werden, mit zusätzlichen Methoden für Reindexierung, beschriftungsbasierte Auswahl und Behandlung fehlender Daten.
DataFrame
Ein DataFrame ist eine zweidimensionale, tabellarische Datenstruktur mit beschrifteten Zeilen und Spalten. Jede Spalte wird intern als Series gespeichert und kann einen unterschiedlichen Datentyp enthalten (numerisch, Zeichenfolge, boolesch usw.). DataFrames können auf verschiedene Weise erstellt werden, einschließlich Wörterbüchern von Listen, NumPy-Arrays und externen Dateien wie CSV- oder Excel-Tabellen. Um eine DataFrame-Spalte als Series abzurufen, verwenden Sie entweder den Index (dict-ähnliche Notation) oder den Namen der Spalte, wenn der Name ein gültiger Python-Bezeichner ist (attributähnlicher Zugriff). DataFrames unterstützen Operationen wie Spaltenzuweisung, Zeilen- und Spaltenlöschung, beschriftungsbasierte Indizierung mit loc, positionsbasierte Indizierung mit iloc, Umformen, Gruppieren und Joinen. Merge-Operationen implementieren eine Teilmenge der relationalen Algebra und ermöglichen Eins-zu-eins-, Viele-zu-eins- und Viele-zu-viele-Joins.
Einige häufige Attribute eines DataFrame umfassen dtypes (Datentyp jeder Spalte), shape (Dimensionen des DataFrame, zurückgegeben als Tupel der Form (Anzahl der Zeilen, Anzahl der Spalten)), index/columns (Beschriftungen der Zeilen bzw. Spalten des DataFrame, zurückgegeben als Index-Objekt), values (Daten im DataFrame, zurückgegeben als 2D-Array) und empty (gibt True zurück, wenn der DataFrame leer ist).
Index
Index-Objekte halten Metadaten für Series- und DataFrame-Objekte, wie Achsenbeschriftungen und Namen, und werden automatisch aus Eingabedaten erstellt. Standardmäßig ist ein pandas-Index eine Reihe von aufsteigenden Ganzzahlen ab 0, ähnlich den Indizes von Python-Arrays. Indizes können jedoch auch jeden NumPy-Datentyp verwenden, einschließlich Gleitkommazahlen, Zeitstempel oder Zeichenfolgen. Indizes sind außerdem unveränderlich, was es ermöglicht, sie sicher über mehrere Objekte hinweg zu teilen.
Die Syntax von pandas zum Zuordnen von Indexwerten zu relevanten Daten ist dieselbe Syntax, die Python zum Zuordnen von Wörterbuchschlüsseln zu Werten verwendet. Wenn beispielsweise s eine Series ist, gibt s['a'] den Datenpunkt am Index a zurück. Anders als Wörterbuchschlüssel sind Indexwerte nicht garantiert eindeutig. Wenn eine Series den Indexwert a für mehrere Datenpunkte verwendet, gibt s['a'] stattdessen eine neue Series mit allen übereinstimmenden Werten zurück. Die Spaltennamen eines DataFrame werden identisch zu einem Index gespeichert und implementiert. Daher kann ein DataFrame als mit zwei Indizes versehen betrachtet werden: einem spaltenbasierten und einem zeilenbasierten. Da Spaltennamen als Index gespeichert werden, müssen diese nicht eindeutig sein.
Wenn Daten eine Series sind, gibt data['a'] alle Werte mit dem Indexwert a zurück. Wenn Daten jedoch ein DataFrame sind, gibt data['a'] alle Werte in der/den Spalte(n) namens a zurück. Um diese Mehrdeutigkeit zu vermeiden, unterstützt pandas die Syntax data.loc['a'] als alternative Möglichkeit, mit dem Index zu filtern. Pandas unterstützt auch die Syntax data.iloc[n], die immer eine Ganzzahl n annimmt und den n-ten Wert zurückgibt, beginnend bei 0. Dies ermöglicht es einem Benutzer, so zu handeln, als ob der Index eine array-ähnliche Sequenz von Ganzzahlen wäre, unabhängig davon, wie er tatsächlich definiert ist.
pandas unterstützt auch hierarchische Indizes mit mehreren Werten pro Datenpunkt durch die Klasse „MultiIndex“. MultiIndex-Objekte ermöglichen es einem einzelnen DataFrame, mehrere Dimensionen darzustellen, ähnlich einer Pivot-Tabelle in Microsoft Excel, wobei jede Ebene optional einen eigenen eindeutigen Namen tragen kann. In der Praxis werden Daten mit mehr als 2 Dimensionen oft mit DataFrames mit hierarchischen Indizes dargestellt, anstelle der höherdimensionalen Panel- und Panel4D-Datenstrukturen.
Funktionalität
pandas unterstützt eine Vielzahl von Indizierungs- und Teilmengentechniken, die es ermöglichen, Daten nach Beschriftung, Index oder booleschen Bedingungen auszuwählen. Beispielsweise gibt df[df['col1'] > 5] alle Zeilen im DataFrame df zurück, für die der Wert der Spalte col1 5 überschreitet. Die Bibliothek implementiert auch Gruppierungsoperationen basierend auf dem Split-Apply-Combine-Ansatz, die es Benutzern ermöglichen, Daten nach Spaltenwerten oder Funktionen, die auf Indexbeschriftungen angewendet werden, zu aggregieren, zu transformieren oder umzustrukturieren. Beispielsweise gruppiert df['col1'].groupby(df['col2']) die Daten in 'col1' nach ihren Werten in 'col2', während df.groupby(lambda i: i % 2) alle Daten im gesamten DataFrame danach gruppiert, ob ihr Index gerade ist.
Die Bibliothek bietet auch Werkzeuge zur Behandlung fehlender Daten, zum Zusammenführen und Joinen von Datensätzen, zum Umformen von Daten (z. B. Pivotieren und Melten), Zeitreihenfunktionalität sowie Ein-/Ausgabe für viele Dateiformate. Diese Funktionen machen pandas zu einem Eckpfeiler des Python-Datenwissenschafts-Ökosystems, das oft in Verbindung mit Machine-Learning-Bibliotheken und Künstlicher-Intelligenz-Workflows verwendet wird. Seine Integration mit NumPy-Arrays und Kompatibilität mit Deep-Learning-Frameworks haben seine Rolle in Datenvorverarbeitungspipelines in verschiedenen Branchen gefestigt, von Finanzen bis zu Amazon-Web-Services-Cloud-Analysen.