Pandas

CheatSheet Cheatsheet 2 PDF CheatSheet 3 Cheatsheet 4 PDF cheatsheet 5 PDF

Series

df.ndim
df.shape
df.size
df.dtype
df.index
df.values  # nicht empfohlen
df.s.array # Pandas-Array
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

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

Time Series

Drei Datentypen:

I/O

The transform method returns an object that is indexed the same as the one being grouped.

Df["a"] = df["a"].transform(