将DataFrame的每个迭代“ for循环”结果保存为Python中的新数组

时间:2020-10-20 00:20:05

标签: python dataframe loops

我需要将每个迭代结果另存为新列表或数据框。我可以打印结果。但是我需要在工作的另一步骤中使用它们。我需要将每个数组保存在项目中。

import numpy as np
import pandas as pd
data = pd.DataFrame()
m =np.random.randint(1, 30, size = (10, 3))
df = pd.DataFrame(m, columns = ["var1", "var2", "var3"])
for i in range(0, len(df)+1):
        for j in range(0, len(df)+1):
            if i-j==3:
                b = df.iloc[j:i]
                print(b)

输出

var1  var2  var3
0    12     1    26
1     2     2    20
2     2     8     1
   var1  var2  var3
1     2     2    20
2     2     8     1
3     2     5    26
   var1  var2  var3
2     2     8     1
3     2     5    26
4    18    19    23
   var1  var2  var3
3     2     5    26
4    18    19    23
5    10    18    17
   var1  var2  var3
4    18    19    23
5    10    18    17
6    14     2    16
   var1  var2  var3
5    10    18    17
6    14     2    16
7    15    19    23
   var1  var2  var3
6    14     2    16
7    15    19    23
8     6    27     8
   var1  var2  var3
7    15    19    23
8     6    27     8
9    11     1    11

当我尝试将它们保存到新数组中时,我尝试在下面添加此代码;

import numpy as np
import pandas as pd
data = pd.DataFrame()
m =np.random.randint(1, 30, size = (10, 3))
df = pd.DataFrame(m, columns = ["var1", "var2", "var3"])
for i in range(0, len(df)+1):
        for j in range(0, len(df)+1):
            if i-j==3:
                b = df.iloc[j:i]
                for k in range (0,9):
                    a = "erkan_" + str(k+1)
                    globals()["erkan_%s" % (j)] = b
                    print("{0} = {1}". format(a, b))

它创建列表名称为erkan_1,erkan_2,...,erkan_8 但保存最后的结果。你能帮我吗?

2 个答案:

答案 0 :(得分:0)

您可以创建一个列表,并将每次迭代的结果添加到列表中,如下所示:

import numpy as np
import pandas as pd

m =np.random.randint(1, 30, size = (10, 3))
df = pd.DataFrame(m, columns = ["var1", "var2", "var3"])

dfs = []
for i in range(0, len(df)+1):
    for j in range(0, len(df)+1):
        if i-j==3:
            dfs.append(df.iloc[j:i])     

dfs是具有每次迭代结果的列表。

您还可以使用pd.concatDataFrame创建唯一的dfs

pd.concat(dfs)

Output:
   var1  var2  var3
0     6    10     5
1    16    10    15
2    13     2    17
1    16    10    15
2    13     2    17
3    12    18     9
2    13     2    17
3    12    18     9
4     9    29     1
3    12    18     9
4     9    29     1
5     6    16    22
4     9    29     1
5     6    16    22
6    19     9    23
5     6    16    22
6    19     9    23
7    11    24    14
6    19     9    23
7    11    24    14
8    13     2    26
7    11    24    14
8    13     2    26
9     9    20    21

答案 1 :(得分:0)

感谢您的帮助,但这不是我想要的。我想将每三行另存为(3x3)矩阵。

erkan_1

0     6    10     5
1    16    10    15
2    13     2    17

erkan_2

1    16    10    15
2    13     2    17
3    12    18     9

.
.
.

如何将它们保存到新的df或系列中?这是用于生成列表名称并为其添加值的代码。但是不能正常工作。