Das zufällige Mischen von Zeilen in einem Pandas DataFrame ist eine häufige Operation in der Datenwissenschaft, die für Aufgaben wie das Erstellen von Trainings- und Testdatensätzen, die Zufallsstichprobenziehung oder einfach das Zufälligmachen von Daten für die Analyse entscheidend ist. Dieser Artikel untersucht drei effiziente Methoden, um dies zu erreichen, und hebt deren Stärken und Schwächen hervor.
Inhaltsverzeichnis
Pandas sample()
Methode
Die Pandas sample()
Methode bietet einen benutzerfreundlichen Ansatz zum Mischen von DataFrame-Zeilen. Durch Setzen des frac
-Parameters auf 1 erhalten Sie eine vollständig randomisierte Reihenfolge des ursprünglichen DataFrames.
import pandas as pd
# Beispiel DataFrame
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
# Mischen mit sample()
shuffled_df = df.sample(frac=1, random_state=42) # random_state für Reproduzierbarkeit
print("Original DataFrame:n", df)
print("nGemischter DataFrame:n", shuffled_df)
Das Argument random_state
ist entscheidend für die Reproduzierbarkeit. Die Angabe einer Ganzzahl gewährleistet ein konsistentes Mischen über mehrere Durchläufe. Das Weglassen führt zu unterschiedlichen Mischungen bei jedem Durchlauf.
NumPy permutation()
Funktion
Die NumPy permutation()
Funktion generiert eine zufällige Permutation von Indizes. Dieser Ansatz ist im Allgemeinen schneller als sample()
, insbesondere für große DataFrames, da er direkt auf NumPy-Arrays arbeitet, die effizienter sind.
import pandas as pd
import numpy as np
# Beispiel DataFrame
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
# Mischen mit numpy.random.permutation()
shuffled_indices = np.random.permutation(len(df))
shuffled_df = df.iloc[shuffled_indices]
print("Original DataFrame:n", df)
print("nGemischter DataFrame:n", shuffled_df)
Für reproduzierbare Ergebnisse verwenden Sie np.random.seed(42)
, bevor Sie np.random.permutation()
aufrufen.
Scikit-learn shuffle()
Funktion
Die Scikit-learn shuffle()
Funktion ist besonders nützlich, wenn ein DataFrame zusammen mit einem verwandten Array (z. B. Labels in einer überwachten Lernumgebung) gemischt wird. Sie stellt sicher, dass der DataFrame und das Array nach dem Mischen synchron bleiben.
import pandas as pd
from sklearn.utils import shuffle
# Beispiel DataFrame
data = {'col1': [1, 2, 3, 4, 5], 'col2': ['A', 'B', 'C', 'D', 'E']}
df = pd.DataFrame(data)
# Mischen von DataFrame und einem separaten Array (falls benötigt)
shuffled_df, _ = shuffle(df, random_state=42) # Unterstrich ignoriert den zweiten Rückgabewert
print("Original DataFrame:n", df)
print("nGemischter DataFrame:n", shuffled_df)
Wie bei den vorherigen Methoden steuert random_state
die Reproduzierbarkeit. Der Unterstrich _
verwirft den zweiten Rückgabewert (der ein gemischtes Array wäre, wenn eines bereitgestellt würde).
Fazit: Jede Methode mischt DataFrame-Zeilen effektiv. Pandas sample()
ist die intuitivste, während NumPys permutation()
oft eine bessere Leistung für größere Datensätze bietet. Scikit-learns shuffle()
ist ideal für das gleichzeitige Mischen eines DataFrames und eines entsprechenden Arrays. Wählen Sie die Methode, die Ihren Bedürfnissen am besten entspricht, und verwenden Sie immer random_state
für reproduzierbare Ergebnisse.