如何从np.array随机获取20个元素并将其保存到DataFrame?

Sol*_*dor 0 python random numpy pandas

我有1到80个数字的DataFrame如何随机获取20个元素并将结果保存到另一个DataFrame?我不能像行一样保存每个列表.它的保存元素就像一个列.在未来,我想尝试使用sklearn预测每个radom元素

   a = np.arange(1,81).reshape(8,10)
   pd.DataFrame(a)
Run Code Online (Sandbox Code Playgroud)

我必须得到20个唯一的数字并将其写成一行.例如在python中:

      from random import sample          
      for x in range(1,20):
          i=sample(range(1,81), k=20)
          i.sort()
          print(x,'-',i)`
Run Code Online (Sandbox Code Playgroud)

它返回列表[1,3,5,8,34,45,12,76,45 ...] 20个元素,我希望它看起来像:

  0 1 2 3 4 5 6 7 8 9 10 11 12 ... 20
0 1 5 10 14 20 55 67 34 ......     20 elements
1
.
.
Run Code Online (Sandbox Code Playgroud)

ank*_*_91 5

使用df.sample()来获得数据的样本FRM的一个数据帧:

a = np.arange(1,81).reshape(8,10)
df = pd.DataFrame(a)
df1= df.sample(frac=.25)
>>df1

    0   1   2   3   4   5   6   7   8   9
5   51  52  53  54  55  56  57  58  59  60
3   31  32  33  34  35  36  37  38  39  40
Run Code Online (Sandbox Code Playgroud)

对于随机排列np.random.permutation():

df.iloc[np.random.permutation(len(df))].head(2)

    0   1   2   3   4   5   6   7   8   9
6   61  62  63  64  65  66  67  68  69  70
1   11  12  13  14  15  16  17  18  19  20
Run Code Online (Sandbox Code Playgroud)

编辑:要在列表中获取20个元素,请使用:

import itertools
list(itertools.chain.from_iterable(df.sample(frac=.25).values))
#[71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Run Code Online (Sandbox Code Playgroud)

frac=.2525%数据的均值,因为您使用了80元素25%为您提供20元素,您可以根据您拥有的多个元素以及您想要的数量来调整分数.

编辑1:进一步编辑问题:print(df.values)给你一个数组:

[[ 1  2  3  4  5  6  7  8  9 10]
 [11 12 13 14 15 16 17 18 19 20]
 [21 22 23 24 25 26 27 28 29 30]
 [31 32 33 34 35 36 37 38 39 40]
 [41 42 43 44 45 46 47 48 49 50]
 [51 52 53 54 55 56 57 58 59 60]
 [61 62 63 64 65 66 67 68 69 70]
 [71 72 73 74 75 76 77 78 79 80]]
Run Code Online (Sandbox Code Playgroud)

你需要np.random.shuffle在这种情况下使用shuffle这个数组,df.T.values因为你也想要对列进行洗牌:

np.random.shuffle(df.T.values)
Run Code Online (Sandbox Code Playgroud)

然后做一个重塑:

df1 = pd.DataFrame(np.reshape(df.values,(4,20)))

>>df1


    0   1   2   3   4   5   6   7   8   9   10  11  12  13  14  15  16  17  18  19
0   4   3   10  2   8   7   1   5   6   9   14  13  20  12  18  17  11  15  16  19
1   24  23  30  22  28  27  21  25  26  29  34  33  40  32  38  37  31  35  36  39
2   44  43  50  42  48  47  41  45  46  49  54  53  60  52  58  57  51  55  56  59
3   64  63  70  62  68  67  61  65  66  69  74  73  80  72  78  77  71  75  76  79
Run Code Online (Sandbox Code Playgroud)