Pandas で DataFrame 行をランダムにシャッフルする方法
-
Pandas の DataFrame 行をシャッフルする
pandas.DataFrame.sample()
メソッド -
numpy.random.permutation()
は Pandas DataFrame 行をシャッフルする -
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()
メソッドを追加して、DataFrame インデックスをリセットできます。
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
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn