如何对 Pandas 中的 DataFrame 行随机排序
Suraj Joshi
2023年1月30日
-
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
作者: Suraj Joshi
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn