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 DataFrame
pozostaje 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_state
wraz 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) DataFrame
wraz z ndarray
zawartoś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