写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。
路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。
今天在项目中,需要将pandas读取得到的数据随机打乱,该数据是DataFrame类型,特此记录。
1、方法一
使用sklearn中的shuffle实现数据打乱功能,具体代码如下:
from sklearn.utils import shuffle
import pandas as pd
data = {
"a": [0, 1, 2, 3, 4, 12, 13, 14],
"b": [2, 4, 5, 6, 4, 15, 16, 17],
"c": [4, 7, 8, 9,3, 18, 19, 20],
"d": [55, 1, 2, 3, 4, 12, 133, 14],
"e": [29, 4, 5, 6, 4, 15, 126, 17],
"f": [6, 7, 8, 9,3, 18, 149, 260]}
df = pd.DataFrame(data)
print(df)
# 打乱数据
df_new = shuffle(df)
print(df_new)
打印结果:
a b c d e f
0 0 2 4 55 29 6
1 1 4 7 1 4 7
2 2 5 8 2 5 8
3 3 6 9 3 6 9
4 4 4 3 4 4 3
5 12 15 18 12 15 18
6 13 16 19 133 126 149
7 14 17 20 14 17 260
-----------------------------------
a b c d e f
6 13 16 19 133 126 149
4 4 4 3 4 4 3
0 0 2 4 55 29 6
5 12 15 18 12 15 18
1 1 4 7 1 4 7
2 2 5 8 2 5 8
7 14 17 20 14 17 260
3 3 6 9 3 6 9
df里面数据:
df_new里面数据:
2、方法二
使用numpy库对数据进行打乱,具体代码如下:
import numpy as np
import pandas as pd
data = {
"a": [0, 1, 2, 3, 4, 12, 13, 14],
"b": [2, 4, 5, 6, 4, 15, 16, 17],
"c": [4, 7, 8, 9,3, 18, 19, 20],
"d": [55, 1, 2, 3, 4, 12, 133, 14],
"e": [29, 4, 5, 6, 4, 15, 126, 17],
"f": [6, 7, 8, 9,3, 18, 149, 260]}
df = pd.DataFrame(data)
print(df)
print("-----------------------------------")
# 打乱DataFrame的索引
df_new_2 = df.iloc[np.random.permutation(len(df))]
print(df_new_2)
df_new_2里面的数据:
3、方法三
使用DataFrame自带的方法,具体代码如下:
import pandas as pd
data = {
"a": [0, 1, 2, 3, 4, 12, 13, 14],
"b": [2, 4, 5, 6, 4, 15, 16, 17],
"c": [4, 7, 8, 9,3, 18, 19, 20],
"d": [55, 1, 2, 3, 4, 12, 133, 14],
"e": [29, 4, 5, 6, 4, 15, 126, 17],
"f": [6, 7, 8, 9,3, 18, 149, 260]}
df = pd.DataFrame(data)
print(df)
# 打乱DataFrame的顺序
df_new_3 = df.sample(frac=1)
# df_new_3 = df.sample(frac=1).reset_index(drop=True)
print(df_new_3)
df_new_3里面的数据:
sample(frac=1)会按照随机顺序对DataFrame进行抽样,实现了打乱DataFrame的顺序。reset_index(drop=True)会重置索引,使得索引按照新的顺序重新排列。如果使用了reset_index(drop=True),df_new_3里面的数据:
可以看到,索引重置了。
下面是sample()方法的一些常用参数和详细介绍:
- n:要抽取的行数或列数,可以是整数。默认为1。
- frac:要抽取的行数或列数占原DataFrame的比例,取值范围为[0,1]。n和frac参数只能同时指定一个,如果同时指定了两个,优先使用n参数。
- replace:是否允许重复抽样,默认为False。如果设为True,则抽取的样本中可能包含重复的行或列。
- weights:行或列的权重列表,用于指定每行或每列被抽取的概率。
- axis:抽取的方向,0表示按行抽取,1表示按列抽取,默认为0。
- random_state:随机数种子,用于控制随机抽样的结果可以重现。
好了,今天的分享就到这里结束了,不足之处还请各位见谅,欢迎在评论区补充。
参考资料:
https://blog.csdn.net/sinat_41858359/article/details/130186566
https://blog.csdn.net/weixin_45503064/article/details/136713380
请扫码关注下方的公众号,让我们共同进步吧。