TL; DR : np.random.shuffle(ndarray)
puede hacer el trabajo.
Entonces, en tu caso
np.random.shuffle(DataFrame.values)
DataFrame
, bajo el capó, utiliza NumPy ndarray como titular de datos. (Puede verificar desde el código fuente de DataFrame )
Entonces, si lo usa np.random.shuffle()
, barajaría la matriz a lo largo del primer eje de una matriz multidimensional. Pero el índice de los DataFrame
restos sin mezclar.
Sin embargo, hay algunos puntos a considerar.
- La función no devuelve ninguno. En caso de que desee conservar una copia del objeto original, debe hacerlo antes de pasar a la función.
sklearn.utils.shuffle()
, como sugirió el usuario tj89, puede designar random_state
junto con otra opción para controlar la salida. Es posible que desee eso para fines de desarrollo.
sklearn.utils.shuffle()
es más rápido. Pero SHUFFLE la información del eje (índice, columna) del DataFrame
junto con el ndarray
que contiene.
Resultado de referencia
entre sklearn.utils.shuffle()
y np.random.shuffle()
.
ndarray
nd = sklearn.utils.shuffle(nd)
0.10793248389381915 seg. 8 veces más rápido
np.random.shuffle(nd)
0.8897626010002568 seg
Marco de datos
df = sklearn.utils.shuffle(df)
0.3183923360193148 seg. 3 veces más rápido
np.random.shuffle(df.values)
0.9357550159329548 sec
Conclusión: si está bien que la información del eje (índice, columna) se mezcle con ndarray, use sklearn.utils.shuffle()
. De lo contrario, usenp.random.shuffle()
código usado
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)
pitónevaluación comparativa