如何对 Pandas 中的 DataFrame 行随机排序

Suraj Joshi 2023年1月30日 2020年6月9日
  1. pandas.DataFrame.sample() 方法在 Pandas DataFrame 行随机排序
  2. numpy.random.permutation()随机排列 Pandas DataFrame 行
  3. sklearn.utils.shuffle() 随机排序 Pandas DataFrame 行
如何对 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 avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

相关文章 - Pandas DataFrame Row