Pandas で DataFrame 行をランダムにシャッフルする方法

  1. Pandas の DataFrame 行をシャッフルする pandas.DataFrame.sample() メソッド
  2. numpy.random.permutation() は Pandas DataFrame 行をシャッフルします
  3. Pandas DataFrame 行をシャッフルするための sklearn.utils.shuffle()

Pandas の Dataframe オブジェクトの sample() メソッド、NumPy モジュールの permutation() 関数、sklearn パッケージの shuffle() 関数を使用して、Pandas の DataFrame 行をランダムにシャッフルできます。

Pandas の DataFrame 行をシャッフルする pandas.DataFrame.sample() メソッド

pandas.DataFrame.sample() を使用して、アイテムのランダムなサンプルを返すことができます DataFrame オブジェクトの軸から。行単位で要素をサンプリングする必要があるので、axis パラメーターを 0 に設定します。これは、axis パラメーターのデフォルト値です。

frac パラメータは、インスタンス全体のうち何を返す必要があるかを決定します。シャッフルしたい場合は、frac の値を 1 に設定します。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13']
fruits=['Apple', 'Papaya', 'Banana', 'Mango']
prices=[3, 1, 2, 4]

df = pd.DataFrame({'Date':dates ,
                   'Fruit':fruits ,
                   'Price': prices})
print(df)

df_shuffled=df.sample(frac=1).reset_index(drop=True)
print(df_shuffled)

出力:

       Date   Fruit  Price
0  April-10   Apple      3
1  April-11  Papaya      1
2  April-12  Banana      2
3  April-13   Mango      4
       Date   Fruit  Price
3  April-13   Mango      4
2  April-12  Banana      2
0  April-10   Apple      3
1  April-11  Papaya      1

上記のように、Dataframe.shuttle メソッドは Pandas DataFrame の行をシャッフルします。DataFrame 行のインデックスは、初期インデックスと同じままです。

reset_index() メソッドを追加して、データフレームインデックスをリセットできます。

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13']
fruits=['Apple', 'Papaya', 'Banana', 'Mango']
prices=[3, 1, 2, 4]

df = pd.DataFrame({'Date':dates ,
                   'Fruit':fruits ,
                   'Price': prices})
print(df)

df_shuffled=df.sample(frac=1).reset_index(drop=True)
print(df_shuffled)

出力:

       Date   Fruit  Price
0  April-10   Apple      3
1  April-11  Papaya      1
2  April-12  Banana      2
3  April-13   Mango      4
       Date   Fruit  Price
0  April-11  Papaya      1
1  April-13   Mango      4
2  April-10   Apple      3
3  April-12  Banana      2

ここで、drop = True オプションは、index 列が新しい列として追加されるのを防ぎます。

numpy.random.permutation() は Pandas DataFrame 行をシャッフルします

numpy.random.permutation() を使用して、DataFrame のインデックスをシャッフルできます。シャッフルされたインデックスを使用して、iloc() メソッドを使用して行を選択すると、ランダムにシャッフルされた行が取得されます。

import pandas as pd
import numpy as np

dates=['April-10', 'April-11', 'April-12', 'April-13']
fruits=['Apple', 'Papaya', 'Banana', 'Mango']
prices=[3, 1, 2, 4]

df = pd.DataFrame({'Date':dates ,
                   'Fruit':fruits ,
                   'Price': prices})

df_shuffled=df.iloc[np.random.permutation(df.index)].reset_index(drop=True)
print(df_shuffled

出力:

       Date   Fruit  Price
0  April-13   Mango      4
1  April-12  Banana      2
2  April-10   Apple      3
3  April-11  Papaya      1

同じコードを実行すると、異なる結果が得られる場合があります。これは、np.random.permutation() 関数が毎回異なる数値の順列を生成するためです。

Pandas DataFrame 行をシャッフルするための sklearn.utils.shuffle()

sklearn.utils.shuffle() を使用して、Pandas DataFrame の行をシャッフルすることもできます。

import pandas as pd
import numpy as np
import sklearn

dates=['April-10', 'April-11', 'April-12', 'April-13']
fruits=['Apple', 'Papaya', 'Banana', 'Mango']
prices=[3, 1, 2, 4]

df = pd.DataFrame({'Date':dates ,
                   'Fruit':fruits ,
                   'Price': prices})

df_shuffled=sklearn.utils.shuffle(df)
print(df_shuffled)

出力:

       Date   Fruit  Price
3  April-13   Mango      4
0  April-10   Apple      3
1  April-11  Papaya      1
2  April-12  Banana      2

sklearn パッケージがインストールされていない場合は、次のスクリプトを使用してインストールできます。

pip install -U scikit-learn

関連記事 - Pandas Row

  • Pandas の列値に基づいてデータフレーム行をフィルタリングする方法
  • comments powered by Disqus