7 - Pandas
Pandas¶
Werkzeug zur Datenanalyse http://pandas.pydata.org/pandas-docs/stable/
import pandas as pd
import requests as req
import numpy as np
import matplotlib.pyplot as plt
Datenstrukturen in Pandas¶
Series¶
Eine Art eindimensionaler Array
ser = pd.Series(["a", "b", "c", "d", "e"])
print(ser)
Wie man sieht, ist automatisch ein Index dabei, der die Werte durchnummeriert. Man kann auch einen eigenen Index angeben
ser = pd.Series(range(1, 6), index=["Eins", "Zwo", "Drei", "Vier", "Fünf"])
print(ser)
Ansonsten funktioniert Series ziemlich ähnlich wie ein Numpy-Array
print(ser[ser >= 3])
print(ser[:3])
Eine Series lässt sich auch mit einem Numpy-Array initialisieren, und kann direkt geplottet werden:
ser = pd.Series(np.linspace(0, 2 * np.pi))
sin = np.sin(ser)
sin.plot()
plt.show()
Wir können einer Series auch einen Namen geben:
ser = pd.Series(np.linspace(0, 2 * np.pi), name="x-Werte")
sin = np.sin(ser).rename("y-Werte")
print(ser.head()) # Zeige die ersten Werte
print(sin.head())
DataFrame¶
~ zweidimensionaler Array, bzw. Tabelle
wetter = pd.DataFrame({"Niederschlag (mm/h)": [5.0, 1.3, 2.3, 4.4],
"Temperatur": [10.3, 8.3, 2.2, 1.0]})
wetter
Auf eine einzelne Spalte kann man folgendermaßen zugreifen:
print(wetter["Niederschlag (mm/h)"]) # so..
print(wetter.Temperatur) # oder so
Dabei ist allerdings zu beachten, dass die Punktnotation nur funktioniert, solange keine Leerzeichen im Spaltennamen enthalten sind
Wir können auch neue Spalten hinzufügen...
wetter["Niederschlagsdauer (h)"] = [0.4, 1.5, 3.2, 2.0]
wetter
.. und wieder entfernen
del wetter["Niederschlagsdauer (h)"]
wetter
Wenn wir eine neue Spalte an einer bestimmten Stelle einfügen wollen:
wetter.insert(1, "Niederschlagsdauer (h)", [1, 2, 3, 4])
wetter
Ebenso können wir neue Spalten erstellen, die sich aus bestehenden Spalten ableiten:
wetter.assign(Niederschlag_total = wetter["Niederschlag (mm/h)"] * wetter["Niederschlagsdauer (h)"])
def celsius_to_kelvin(dataframe):
return dataframe.Temperatur + 273.15
wetter.assign(temp_kelvin = celsius_to_kelvin)
Dabei ändert sich der ursprüngliche Dataframe allerdings nicht! Jede Änderung müssen wir daher wieder in einer Variablen speichern, sonst geht sie verloren
wetter
GroupBy¶
df = pd.DataFrame({"Spalte 1": np.random.randint(20, size=30),
"Spalte 2": np.random.random(size=30),
"Spalte 3": list(10 * "abc")})
df.head()
Spalte 3 gibt für jede Zeile eine Kategorie an, die a, b, oder c ist. Mithilfe von groupby ist es nun möglich, die Daten nach diesen drei Kategorien zu sortieren und zusammenzufassen.
Beispiel: wir gruppieren die Tabelle nach den Kategorien in Spalte 3 und lassen uns Durchschnittswerte jeder Kategorie ausgeben
df.groupby("Spalte 3").mean()