Python Pandas 如何shuffle(打乱)数据

  • Post category:Python
  1. 导入模块和数据集

首先,我们需要导入需要的模块和数据集,例如:

import pandas as pd
import numpy as np

# 加载数据集
dataset = pd.read_csv('data.csv')
  1. 手动shuffle

手动打乱数据的方法很简单,我们只需要使用numpy.random.permutation()函数,它会返回乱序后的索引,然后我们就可以根据这些索引来重新排列数据集了。

# 生成随机索引
shuffle_index = np.random.permutation(len(dataset))

# 使用随机索引重新排列数据集
shuffled_dataset = dataset.iloc[shuffle_index]

我们可以使用iloc()方法根据新的索引重新排列数据集。

  1. Padas中的shuffle方法

另一个更方便的方法是使用Pandas的sample()函数。这个函数会在不改变索引的情况下,随机选择数据集中的指定比例的数据。

# 使用sample函数打乱数据
shuffled_dataset = dataset.sample(frac=1)

这里的frac参数代表需要选取的比例,根据我们的需求来设定即可。

  1. 示例说明

假设我们有一份名为data.csv的数据集,它有3列,分别是name, age和score,我们希望对数据集打乱顺序,让它变得更加随机。下面是具体的代码示例:

# 导入模块和数据集
import pandas as pd
import numpy as np

dataset = pd.read_csv('data.csv')

# 手动shuffle数据
shuffle_index = np.random.permutation(len(dataset))
shuffled_dataset_manually = dataset.iloc[shuffle_index]

# 使用Pandas中的sample函数打乱数据
shuffled_dataset_pandas = dataset.sample(frac=1)

# 输出shuffle后的数据集
print("手动shuffle之后的数据集:")
print(shuffled_dataset_manually.head(10))

print("使用Pandas中的sample()函数shuffle之后的数据集:")
print(shuffled_dataset_pandas.head(10))

输出结果如下:

手动shuffle之后的数据集:
       name  age  score
628  李洋洋   26     78
988  王利斌   29     69
90   张宇鹏   28     87
396  何保平   22     89
213  郑园园   24     83
232  张扬扬   20     80
699  李桂英   29     81
310  贺晨光   28     76
907   陈雅琳   27     84
321  姜​鹏   21     81

使用Pandas中的sample()函数shuffle之后的数据集:
      name  age  score
569  刘天宇   24     84
564  王颖婷   28     88
777  金明明   23     81
15   宋建涛   30     78
313   王瑞   25     79
674   刘倩   30     80
355  王志刚   23     81
338  李洪宇   26     79
292   宋良   28     74
177   刘红   30     86

可以看出,手动shuffle和使用Pandas的sample()函数的结果是不一样的,但它们都能成功打乱数据集。具体使用哪种方法取决于我们自己的需求。