TL; DR : np.random.shuffle(ndarray)
pode fazer o trabalho.
Então, no seu caso
np.random.shuffle(DataFrame.values)
DataFrame
, sob o capô, usa o NumPy ndarray como suporte para dados. (Você pode verificar no código-fonte do DataFrame )
Portanto, se você usar np.random.shuffle()
, ele embaralha a matriz ao longo do primeiro eixo de uma matriz multidimensional. Mas o índice dos DataFrame
restos não foi baralhado.
No entanto, existem alguns pontos a considerar.
- A função não retorna nenhum. Caso deseje manter uma cópia do objeto original, é necessário fazê-lo antes de passar para a função.
sklearn.utils.shuffle()
, como o usuário tj89 sugeriu, pode designar random_state
junto com outra opção para controlar a saída. Você pode querer isso para fins de desenvolvimento.
sklearn.utils.shuffle()
é mais rápido. Porém, embaralhará as informações do eixo (índice, coluna) do DataFrame
junto com o que ndarray
ele contém.
Resultado de referência
entre sklearn.utils.shuffle()
e np.random.shuffle()
.
ndarray
nd = sklearn.utils.shuffle(nd)
0,10793248389381915 seg. 8x mais rápido
np.random.shuffle(nd)
0,897626010002568 seg
Quadro de dados
df = sklearn.utils.shuffle(df)
0,3183923360193148 seg. 3x mais rápido
np.random.shuffle(df.values)
0.9357550159329548 sec
Conclusão: Se não for permitido alinhar as informações (índice, coluna) do eixo junto com o ndarray, use sklearn.utils.shuffle()
. Caso contrário, 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ãoavaliação comparativa