TL; DR : np.random.shuffle(ndarray)
può fare il lavoro.
Quindi, nel tuo caso
np.random.shuffle(DataFrame.values)
DataFrame
, sotto il cofano, utilizza NumPy ndarray come titolare dei dati. (Puoi controllare dal codice sorgente DataFrame )
Quindi, se lo usi np.random.shuffle()
, mescolerebbe l'array lungo il primo asse di un array multidimensionale. Ma l'indice dei DataFrame
resti non mischiato.
Tuttavia, ci sono alcuni punti da considerare.
- la funzione non restituisce nessuna. Nel caso in cui si desideri conservare una copia dell'oggetto originale, è necessario farlo prima di passare alla funzione.
sklearn.utils.shuffle()
, come suggerito dall'utente tj89, può designare random_state
insieme a un'altra opzione per controllare l'output. Potresti volerlo a scopo di sviluppo.
sklearn.utils.shuffle()
è più veloce. Ma SHUFFLE le informazioni sull'asse (indice, colonna) del DataFrame
insieme con ndarray
esso contiene.
Risultato del benchmark
tra sklearn.utils.shuffle()
e np.random.shuffle()
.
ndarray
nd = sklearn.utils.shuffle(nd)
0,10793248389381915 sec. 8 volte più veloce
np.random.shuffle(nd)
0,8897626010002568 sec
dataframe
df = sklearn.utils.shuffle(df)
0,3183923360193148 sec. 3 volte più veloce
np.random.shuffle(df.values)
0.9357550159329548 sec
Conclusione: se va bene mescolare le informazioni degli assi (indice, colonna) insieme a ndarray, usare sklearn.utils.shuffle()
. Altrimenti, usanp.random.shuffle()
codice usato
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)
pitoneAnalisi comparativa