TL; DR : np.random.shuffle(ndarray)
peut faire le travail.
Donc, dans ton cas
np.random.shuffle(DataFrame.values)
DataFrame
, sous le capot, utilise NumPy ndarray comme support de données. (Vous pouvez vérifier à partir du code source DataFrame )
Donc, si vous utilisez np.random.shuffle()
, cela mélange le tableau le long du premier axe d'un tableau multidimensionnel. Mais l'indice des DataFrame
restes n'a pas été mélangé.
Cependant, il y a quelques points à considérer.
- la fonction ne renvoie aucun. Si vous souhaitez conserver une copie de l'objet d'origine, vous devez le faire avant de passer à la fonction.
sklearn.utils.shuffle()
, comme l'a suggéré l'utilisateur tj89, peut désigner random_state
une autre option pour contrôler la sortie. Vous voudrez peut-être cela à des fins de développement.
sklearn.utils.shuffle()
est plus rapide. Mais SHUFFLE les informations d'axe (index, colonne) du DataFrame
avec le ndarray
contenu.
Résultat de référence
entre sklearn.utils.shuffle()
et np.random.shuffle()
.
ndarray
nd = sklearn.utils.shuffle(nd)
0,10793248389381915 sec. 8x plus rapide
np.random.shuffle(nd)
0.8897626010002568 sec
Trame de données
df = sklearn.utils.shuffle(df)
0.3183923360193148 sec. 3x plus rapide
np.random.shuffle(df.values)
0.9357550159329548 sec
Conclusion: S'il est correct d'axer les informations (index, colonne) à mélanger avec ndarray, utilisez sklearn.utils.shuffle()
. Sinon, utiliseznp.random.shuffle()
code utilisé
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)
pythonanalyse comparative