Pandas
CheatSheet Cheatsheet 2 PDF CheatSheet 3 Cheatsheet 4 PDF cheatsheet 5 PDF
Series
- Eindimensionales Feld ("Spalte") mit zugehörigem Index
- Default Index: 0, 1, 2, …
- User defined Index: Zahl, String, etc., kann bei Erstellung einer Series mit angegeben werden
- Eigenschaften:
df.ndim
df.shape
df.size
df.dtype
df.index
df.values # nicht empfohlen
df.s.array # Pandas-Array
- Funktionen
s.to_numpy() # konvertiert Daten zu ndarray, besser als s.array
for index, value in s.items():
print(index, value) # Interation über Series-Objekt
data.values # Zugriff auf Datenelemente (=numpy.ndarray)
data.index # Zugriff auf Index-Namen
data[1] # Element zweite Zeile
data['a'] # Element mit Index-Namen 'a'
a = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
# Dict wird automatisch zu Daten und Index umgewandelt
pd.data_range(start=<yyyy-mm-dd>, end=<date>, periods=<N>) # erzeugt Liste vergleichbar linspace
Dataframe
- Zweidimensionales Feld ("Tabelle", mit zugehörigem Index) und "Überschriften"
- df["name"] indiziert eine Spalte # wird als pd.series zurückgegeben
- Eigenschaften & Funktionen:
df.index # Zeilenbeschriftung
df.columns # "Überschriften", auch schreibender Zugriff
df.[<col>].unique() # set(<elements) von Spalte <col>
df = pd.DataFrame(
np.random.randn(num_samples, num_features), # Daten, kann "dict of Series" sein
index=index, # Index (optional)
columns=["Weight", "Temp", "Speed"]) # Überschriften (optional), sonst automatisch 0, 1, 2, … oder aus Dict
df.head(<N>) # zeigt die ersten N Einträge an (keine Angabe: N=5)
df.tail(<N>) # zeigt die letzten N Einträge an (keine Angabe: N=5)
for i in df[<column>]: # Einträge der Spalte ohne Index
print(i)
for i in df: # nur die Überschriften
print(i)
# Einträge der Spalte: Index und Werte # Werte können mit val["Spalte"] einzeln angesprochen werden
for index, val in df.iterrows():
print(index, val) ```
# Indexing
```Python
df["<col>"] # Spalte <col>
df.loc[<key1>:<key2>] # alle Zeilen von Zeile <key1> bis <key2> (inclusive!)
df.loc # Zeile label based für Series (Zeile) und DataFrame (Zeile und/oder Spalte)
df.iloc # Zeile integer based, obere Grenze nicht enthalten
# *** Mischung Label/Integer (loc/iloc) nicht möglich ***
df.loc[<key1>:<key2>, <col>] # Spalte <col> aus den Zeilen <key1> bis <key2> (inclusive!)
Missing Values (NaN)
# Pandas ignoriert NaN in Berechnungen (in Gegensatz zu NumPy)
pd.isna(df) # True/False-Tabelle mit True an NaN-Stellen
df.dropna(axis='rows') # löscht Zeilen mit NaN (= Default)
df.dropna(axis='columnns') # löscht Spalten mit NaN
df.fillna(value=<wert>) # NaN-Werte werden duch <wert> ersetzt, <wert> kann dict {col:value} sein
df.interpolate() # ersetzt NaN-Werte durch Mittelwert aus Vorgänger und Nachfolger
Dataframes zusammenfügen
pd.concat([df1, df2], axis=0, join=) # wie in NumPy, einfaches Zusammenfügen über eine Achse
# join='inner' => Schnittmenge,
# join='outer' => Vereinigungsmenge
pd.append() # wie concat nur immer untereinander (axis=0)
# Index-Werte aus beiden Frames werden übernommen (=> doppelte Indices möglich)
# Ignore_index=True => Indices werden neu durchnummeriert (keine Doppelten mehr)
pd.merge(<df1>, <df2>, on='key') # Spalten zusammenführen auf Basis von Spalte "key" (= Referenz bzw. ID)
df1.join(<df2>, <parameters>) # Zeilen zusammenführen, analog zu merge
GroupBy
- df.apply(
, ) # wendet auf alle Elemente an, ggf. notwendig (z.B. np.sum, axis=0) - df.groupby(
) # erzeugt "Zwischentabelle" mit set( ) als Zeilenindex - df.groupby(
)[ ].aggregate( ) # führt auf "Zwischentabelle" aus -
df.groupby(
)[ ) # gleich .aggregate( ) -
.get_group('South') # nur eine Spalte/Gruppe (?) aus der Zwischentabelle
- .count() # The number of non-null records
- .sum() # The sum of the values
- .mean() # The arithmetic mean of the values
- .median() # The median of the values
- .min() # The minimum value of the group
- .max() # The maximum value of the group
- .mode() # The most frequent value in the group
- .std() # The standard deviation of the group
- .var() # The variance of the group
Time Series
Drei Datentypen:
- Timestamp # Zeitpunkt # to_datetime, date_range
- Timedelta # Zeitunterschied in Zeiteinheiten # to_timedelta, timedelta_range
-
Period # konkreter Zeitbereich (Datum1 bis Datum2) # period, period_range
-
.tz_localize("
") # umrechnen auf gewünschte Zeitzone, zone = "UTC", "EST", "Europe/Berlin", … - pd.Timestamp("2018-01-05 12:00:00")
- pd.Timestamp("13.03.2023") # wird falsch interpretiert! (Tag und Monat vertauscht)
- timestamp + pd.Timedelta("1 day") # day, hour, minute, second, ms; NICHT: week, month, year
- pd.Period(2021-05")
- List of Timestamps can be used as indices
- pd.date_range() kann mit datetime.datetime kombiniert werden
- pd.Timestamp.now() # aktuelles Datum mit Zeit
I/O
- CSV # Pd.read_csv() / pd.to_csv()
- JSON# Pd.read_json() / pd.to_json()
- CSV # Pd.read_csv() / pd.to_csv()
- HTML # Pd.read_html() / pd.to_html()
- Clipboard# Pd.read_clipboard() / pd.to_clipboard()
- Excel # Pd.read_excel() / pd.to_excel()
- SQL # Pd.read_sql() / pd.to_sql()
- df.describe() # vorgefertigte Statistiken
- df.agg([
- = min, max, median, mean, var, std
- df[
].value_counts() # Anzahl je Ausprägung
The transform method returns an object that is indexed the same as the one being grouped.
Df["a"] = df["a"].transform(
- df["C"] = np.where(df["C"] < 0.5, 0.0, df["C"]) # "where" kann auch Werte ersetzen