Einführung
Willkommen im Pandas Basics Lab! In diesem Lab werden wir einige grundlegende Aspekte der Pandas-Bibliothek untersuchen: die Speicherbenutzung von DataFrame, das Umgang mit if/Wahrheitsaussagen, das Verwenden von Methoden benutzerdefinierter Funktionen (UDF), das Umgang mit NA-Werten, die Unterschiede zu NumPy und die Überlegungen zur Threadsicherheit.
Tipps für die VM
Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu nutzen.
Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund von Einschränkungen in Jupyter Notebook nicht automatisiert werden.
Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.
Das Verständnis der Speicherbenutzung von DataFrame
Pandas bietet mehrere Methoden, um die Speicherbenutzung eines DataFrame zu verstehen. Die .info()-Methode kann verwendet werden, um einen Überblick zu erhalten, einschließlich der Speicherbenutzung.
import pandas as pd
import numpy as np
## Erstellen eines DataFrame
dtypes = ["int64", "float64", "datetime64[ns]", "timedelta64[ns]", "complex128", "object", "bool"]
n = 5000
data = {t: np.random.randint(100, size=n).astype(t) for t in dtypes}
df = pd.DataFrame(data)
df["categorical"] = df["object"].astype("category")
## Anzeige der DataFrame-Informationen
df.info()
Das Verwenden von if/Wahrheitsaussagen mit Pandas
Aufgrund der Mehrdeutigkeit unterstützt Pandas die direkte Verwendung von if/Wahrheitsaussagen nicht. Verwenden Sie stattdessen Methoden wie .any(), .all() oder .empty().
## Überprüfen, ob in der Series mindestens ein Wert True ist
if pd.Series([False, True, False]).any():
print("Mindestens ein True-Wert in der Series")
Das Mutieren mit Methoden benutzerdefinierter Funktionen (UDF)
Wenn Sie eine Pandas-Methode verwenden, die eine UDF akzeptiert, vermeiden Sie es, das DataFrame innerhalb der UDF zu ändern. Stattdessen erstellen Sie eine Kopie, bevor Sie Änderungen vornehmen.
def f(s):
s = s.copy()
s.pop("a")
return s
df = pd.DataFrame({"a": [1, 2, 3], 'b': [4, 5, 6]})
df.apply(f, axis="columns")
Das Umgang mit NA-Werten
Pandas bietet nullable-integer-Erweiterungsdatentypen an, um ganze Zahlen mit möglicherweise fehlenden Werten zu repräsentieren.
s_int = pd.Series([1, 2, 3, 4, 5], index=list("abcde"), dtype=pd.Int64Dtype())
s2_int = s_int.reindex(["a", "b", "c", "f", "u"])
Das Verständnis der Unterschiede zu NumPy
Pandas und NumPy haben geringfügige Unterschiede in der Berechnung der Varianz. Dies ist bei der Umschaltung zwischen den beiden Bibliotheken zu berücksichtigen.
## Varianz in pandas
var_pandas = df.var()
## Varianz in NumPy
var_numpy = np.var(df.values)
Die Berücksichtigung der Threadsicherheit in Pandas
Pandas ist nicht 100 % threadsicher. Seien Sie vorsichtig, wenn Sie Pandas-Objekte zwischen mehreren Threads teilen.
Das Umgang mit Byte-Reihenfolge-Problemen
Sie können bei der Bearbeitung von Daten, die auf einem Computer mit einer anderen Byte-Reihenfolge erstellt wurden, Probleme mit der Byte-Reihenfolge auftauchen. Konvertieren Sie die Daten in die native System-Byte-Reihenfolge, bevor Sie sie an Pandas übergeben.
x = np.array(list(range(10)), ">i4") ## big endian
newx = x.byteswap().newbyteorder() ## force native byteorder
s = pd.Series(newx)
Zusammenfassung
In diesem Lab haben wir einige entscheidende Aspekte der Pandas-Bibliothek untersucht. Ein Verständnis dieser Aspekte wird Ihnen helfen, Pandas effektiver zu nutzen und häufige Fehlerquellen zu vermeiden.