Sicher verstaut - Deduplizierung spart Platz, Cloud-Backup für Windows, Areca sichert kostenlos. ADMIN 01/14 stellt Backups für Profis mit und ohne Cloud ... (mehr)

List- und Dictionary-Methoden

Auch der Zugriff auf Elemente eines NumPy-Arrays funktioniert in der von Python bekannten Weise mit Indizes und Slices. Das erste Element liefert »array[0]« , die ersten beiden »array[:2]« . Bei mehrdimensionalen Arrays steuert eine durch Kommas getrennte Argumentliste die einzelnen Dimensionen an, etwa »array[0,2]« . Auch hier ermöglichen Slices die Extraktion von Bereichen.

Neben den Listenfunktionen hält sich NumPy auch für Mengenoperationen bereit. Die Methode »unique()« gibt nur die unterschiedlichen Elemente eines Arrays aus und erstellt damit faktisch ein Set (Menge). Daneben bildet es Schnittmengen und Vereinigungsmengen aus eindimensionalen Arrays mit »intersect1d()« und »union1d()« .

Pandas in Serie

Auf Basis der NumPy-Arrays führt Pandas weitere Datenstrukturen ein, die die Effizienz von NumPy mit einfacher Handbarkeit kombinieren. An erster Stelle steht hier das »Series« -Objekt. Es handelt sich dabei um ein eindimensionales NumPy-Array, ist jedoch mit zusätzlichen Methoden und Attributen ausgestattet. Entsprechend gleicht das Erzeugen eines Series-Objekts dem eines NumPy-Arrays:

s = pd.Series([1, 2, 3])

Eine der Erweiterungen verglichen mit NumPy-Arrays besteht in den Indizes, die jedes Series-Objekt bereithält. Werden diese nicht explizit definiert, bestehen sie wie bei einer Liste aus fortlaufenden Nummern. Die Indizes dürfen aber auch beispielsweise Strings sein:

Series([1, 2, 3], index=['a', 'b', 'c'])

Nun lassen sich die Elemente ähnlich wie bei einem Python-Dictionary abrufen, etwa über »s['a']« . Diesem Umstand kommt Pandas entgegen und erlaubt die Initialisierung eines Series-Objekts auch direkt aus einem Python-Dictionary:

Series({'a': 1, 'b': 2, 'c': 3})

Auch in diesem Anwendungsfall lässt sich separat eine Liste als »index« -Argument übergeben. Das führt dazu, das aus dem Dictionary ausschließlich jene Elemente im resultierenden Series-Objekt landen, die auch im Index vorkommen. Umgekehrt initialisiert Pandas die Werte für Indizes, die im Dictionary fehlen, als nicht vorhanden ( »NaN« ). Im folgenden Fall fällt beispielsweise der Eintrag für »'d'« im Ergebnis weg, während »'c'« ohne Wert initialisiert wird.

In: Series({'a': 1, 'b': 2, 'd': 4}, index=['a', 'b', 'c'])
Out:
a     1
b     2
c   NaN
dtype: float64

Auch mehrere Indizes sind erlaubt. Dazu übergibt man dem »index« -Argument statt einer einfachen Liste eine Liste von Tupel, deren Elemente wiederum die Indizes darstellen. Solche Strukturen dienen in der Praxis vor allem dazu, Datensätze anhand eines ersten Index zu gruppieren, wobei der zweite Index dann die Elemente innerhalb einer solchen Gruppe eindeutig identifiziert.

Bei den Indizes handelt es sich um eigene Pandas-Datenobjekte, die generell unveränderbar sind. Allerdings lassen sie sich mit der Methode »reindex()« austauschen. Sie akzeptiert als Argument eine Liste, ebenso wie das »index« -Argument bei der Series-Initialisierung. Auch hier füllt Pandas nicht vorhandene Werte mit »NaN« auf und entfernt solche Werte, die im neuen Index nicht mehr vorkommen. Anstelle von »NaN« lassen sich mit dem Argument »fill_value« andere Standardwerte festlegen, sodass leere Zeilen beispielsweise mit 0 gefüllt werden:

s.reindex(['d', 'e', 'f'], fill_value=0)

»s« steht hierbei für ein zuvor erzeugtes Series-Objekt.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023