如何對 Pandas 中的 DataFrame 行隨機排序
Suraj Joshi
2023年1月30日
2020年6月9日
-
pandas.DataFrame.sample()
方法在 Pandas DataFrame 行隨機排序 - numpy.random.permutation()隨機排列 Pandas DataFrame 行
-
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
Author: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn