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)
pythonベンチマーク