如何對 Pandas 中的 DataFrame 行隨機排序

  1. pandas.DataFrame.sample() 方法在 Pandas DataFrame 行隨機排序
  2. numpy.random.permutation()隨機排列 Pandas DataFrame 行
  3. sklearn.utils.shuffle() 隨機排序 Pandas DataFrame 行

我們可以使用 Pandas Dataframe 物件的 sample() 方法,NumPy 模組中的 permutation() 函式和 sklearn 包中的 shuffle() 函式來對 Pandas 中的 DataFrame 行隨機排序。

pandas.DataFrame.sample() 方法在 Pandas DataFrame 行隨機排序

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() 函式每次都會生成不同的數字排列。

sklearn.utils.shuffle() 隨機排序 Pandas DataFrame 行

我們還可以使用 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 DataFrame Row

  • Pandas 中 axis 的含義