TL; DR : np.random.shuffle(ndarray)kann den Job machen.
Also in deinem Fall
np.random.shuffle(DataFrame.values)
DataFrameverwendet unter der Haube NumPy ndarray als Datenhalter. (Sie können dies anhand des DataFrame-Quellcodes überprüfen. )
Wenn Sie also verwenden np.random.shuffle(), wird das Array entlang der ersten Achse eines mehrdimensionalen Arrays gemischt. Aber der Index der DataFramebleibt ungemischt.
Es gibt jedoch einige Punkte zu beachten.
- Funktion gibt keine zurück. Wenn Sie eine Kopie des Originalobjekts behalten möchten, müssen Sie dies tun, bevor Sie an die Funktion übergeben.
sklearn.utils.shuffle()kann, wie der Benutzer tj89 vorgeschlagen hat, random_statezusammen mit einer anderen Option zur Steuerung der Ausgabe festlegen . Vielleicht möchten Sie das für Entwicklerzwecke.
sklearn.utils.shuffle()ist schneller. Aber wird die Achseninfo (Index, Spalte) der DataFramezusammen mit der ndarraydarin enthaltenen mischen .
Benchmark-Ergebnis
zwischen sklearn.utils.shuffle()und np.random.shuffle().
ndarray
nd = sklearn.utils.shuffle(nd)
0,10793248389381915 Sek. 8x schneller
np.random.shuffle(nd)
0,8897626010002568 Sek
DataFrame
df = sklearn.utils.shuffle(df)
0,3183923360193148 Sek. 3x schneller
np.random.shuffle(df.values)
0,9357550159329548 Sek
Schlussfolgerung: Wenn es in Ordnung ist, Achseninformationen (Index, Spalte) zusammen mit ndarray zu mischen, verwenden Sie sklearn.utils.shuffle(). Andernfalls verwenden Sienp.random.shuffle()
gebrauchter Code
import timeit
setup = '''
import numpy as np
import pandas as pd
import sklearn
nd = np.random.random((1000, 100))
df = pd.DataFrame(nd)
'''
timeit.timeit('nd = sklearn.utils.shuffle(nd)', setup=setup, number=1000)
timeit.timeit('np.random.shuffle(nd)', setup=setup, number=1000)
timeit.timeit('df = sklearn.utils.shuffle(df)', setup=setup, number=1000)
timeit.timeit('np.random.shuffle(df.values)', setup=setup, number=1000)
PythonBenchmarking