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)
пітонбенчмаркінг