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 DataFramerestos 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_statejunto 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 DataFramejunto com o que ndarrayele 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