TL; DR : np.random.shuffle(ndarray)
может сделать работу.
Итак, в вашем случае
np.random.shuffle(DataFrame.values)
DataFrame
, под капотом, использует NumPy ndarray в качестве держателя данных. (Вы можете проверить из исходного кода DataFrame )
Так что, если вы используете np.random.shuffle()
, он будет перетасовывать массив вдоль первой оси многомерного массива. Но индекс DataFrame
остается не перетасованным.
Тем не менее, есть некоторые моменты, которые следует учитывать.
- функция не возвращает ничего. Если вы хотите сохранить копию исходного объекта, вы должны сделать это, прежде чем перейти к функции.
sklearn.utils.shuffle()
, как предложил пользователь tj89, может назначить random_state
наряду с другой опцией для управления выводом. Вы можете хотеть это для цели разработки.
sklearn.utils.shuffle()
быстрее. Но будет перетасовывать информацию об оси (индекс, столбец) DataFrame
вместе с ndarray
содержащейся в ней.
Результат теста
между sklearn.utils.shuffle()
и np.random.shuffle()
.
ndarray
nd = sklearn.utils.shuffle(nd)
0,10793248389381915 сек. В 8 раз быстрее
np.random.shuffle(nd)
0,8897626010002568 с
DataFrame
df = sklearn.utils.shuffle(df)
0,3183923360193148 сек. В 3 раза быстрее
np.random.shuffle(df.values)
0,9357550159329548 сек
Вывод: если информация оси (индекс, столбец) может быть перетасована вместе с ndarray, используйте sklearn.utils.shuffle()
. В противном случае используйтеnp.random.shuffle()
используемый код
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)
питонбенчмаркинг