TL; DR : np.random.shuffle(ndarray)może wykonać zadanie.
Więc w twoim przypadku
np.random.shuffle(DataFrame.values)
DataFrame, pod maską, używa NumPy ndarray jako uchwytu danych. (Możesz sprawdzić z kodu źródłowego DataFrame )
Więc jeśli użyjesz np.random.shuffle(), przetasuje tablicę wzdłuż pierwszej osi tablicy wielowymiarowej. Ale indeks DataFramepozostaje niezmieniony.
Chociaż należy wziąć pod uwagę kilka kwestii.
- funkcja nie zwraca żadnych. Jeśli chcesz zachować kopię oryginalnego obiektu, musisz to zrobić przed przejściem do funkcji.
sklearn.utils.shuffle(), jak sugerował użytkownik tj89, może wyznaczyć random_statewraz z inną opcją sterowania wyjściem. Możesz tego chcieć dla celów programistycznych.
sklearn.utils.shuffle()jest szybszy. Ale BĘDĘ SHUFFLE informacje o osi (indeks, kolumna) DataFramewraz z ndarrayzawartością.
Wynik testu
pomiędzy sklearn.utils.shuffle()i np.random.shuffle().
ndarray
nd = sklearn.utils.shuffle(nd)
0.10793248389381915 sec. 8x szybciej
np.random.shuffle(nd)
0,8897626010002568 sec
Ramka danych
df = sklearn.utils.shuffle(df)
0.3183923360193148 sec. 3x szybciej
np.random.shuffle(df.values)
0,9357550159329548 sek
Wniosek: Jeśli można przetasować informacje o osi (indeks, kolumna) wraz z ndarray, użyj sklearn.utils.shuffle(). W przeciwnym razie użyjnp.random.shuffle()
użyty kod
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)
pytonanaliza porównawcza