TL; DR : np.random.shuffle(ndarray)
kann den Job machen.
Also in deinem Fall
np.random.shuffle(DataFrame.values)
DataFrame
verwendet 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 DataFrame
bleibt 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_state
zusammen 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 DataFrame
zusammen mit der ndarray
darin 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