Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用数据帧循环函数_Python_Pandas - Fatal编程技术网

Python 使用数据帧循环函数

Python 使用数据帧循环函数,python,pandas,Python,Pandas,我有一个函数,它将数据帧和整数作为参数: func(df, int) 该函数返回一个新的数据帧,例如: df2 = func(df,2) 我想为整数2-10编写一个循环,生成9个数据帧。如果我手动执行此操作,它将如下所示: df2 = func(df,2) df3 = func(df2,3) df4 = func(df3,4) df5 = func(df4,5) df6 = func(df5,6) df7 = func(df6,7) df8 = func(df7,8) df9

我有一个函数,它将数据帧和整数作为参数:

func(df, int)
该函数返回一个新的数据帧,例如:

df2 = func(df,2) 
我想为整数2-10编写一个循环,生成9个数据帧。如果我手动执行此操作,它将如下所示:

df2 = func(df,2) 
df3 = func(df2,3) 
df4 = func(df3,4) 
df5 = func(df4,5) 
df6 = func(df5,6) 
df7 = func(df6,7) 
df8 = func(df7,8) 
df9 = func(df8,9) 
df10 = func(df9,10) 

有没有一种方法可以编写这样的循环?

您可以将
exec
格式的ted字符串一起使用:

for i in range(2, 11):
    exec("df{0} = func(df{1}, {0})".format(i, i - 1 if i > 2 else ''))

您可以将
exec
format
ted字符串一起使用:

for i in range(2, 11):
    exec("df{0} = func(df{1}, {0})".format(i, i - 1 if i > 2 else ''))

这种类型的东西就是列表的用途

data_frames = [df]
for i in range(2, 11):
    data_frames.append(func(data_frames[-1], i))
当您看到变量名如
df1
df2
df3
等时,这是代码脆弱的标志。当您要构建一系列相关对象时,请使用列表

为了澄清,此data_frames是一个数据帧列表,可以与data_frames=pd.concat(data_frames,sort=False)连接,从而形成一个数据帧,将原始df与循环产生的所有结果结合在一起,对吗

是的,没错。如果您的目标是最后一个数据帧,则可以在末尾连接整个列表,以将信息合并到单个帧中

你介意解释一下为什么数据帧[-1],作为列表的最后一项,返回一个数据帧吗?我对此不清楚


因为在构建列表时,每个条目始终是一个数据帧<代码>数据帧[-1]
计算为列表中的最后一个元素,在本例中,该元素是您最近添加的数据帧。

这种类型的内容就是列表的用途

data_frames = [df]
for i in range(2, 11):
    data_frames.append(func(data_frames[-1], i))
当您看到变量名如
df1
df2
df3
等时,这是代码脆弱的标志。当您要构建一系列相关对象时,请使用列表

为了澄清,此data_frames是一个数据帧列表,可以与data_frames=pd.concat(data_frames,sort=False)连接,从而形成一个数据帧,将原始df与循环产生的所有结果结合在一起,对吗

是的,没错。如果您的目标是最后一个数据帧,则可以在末尾连接整个列表,以将信息合并到单个帧中

你介意解释一下为什么数据帧[-1],作为列表的最后一项,返回一个数据帧吗?我对此不清楚


因为在构建列表时,每个条目始终是一个数据帧<代码>数据帧[-1]计算到列表中的最后一个元素,在本例中,该元素是您最近添加的数据帧。

您可以尝试使用
itertools。按如下方式累积

样本数据

df:
    a   b   c
0  75  18  17
1  48  56   3

import itertools

def func(x, y):
    return x + y

dfs = list(itertools.accumulate([df] + list(range(2, 11)), func))

[    a   b   c
 0  75  18  17
 1  48  56   3,     a   b   c
 0  77  20  19
 1  50  58   5,     a   b   c
 0  80  23  22
 1  53  61   8,     a   b   c
 0  84  27  26
 1  57  65  12,     a   b   c
 0  89  32  31
 1  62  70  17,     a   b   c
 0  95  38  37
 1  68  76  23,      a   b   c
 0  102  45  44
 1   75  83  30,      a   b   c
 0  110  53  52
 1   83  91  38,      a    b   c
 0  119   62  61
 1   92  100  47,      a    b   c
 0  129   72  71
 1  102  110  57]
dfs
是结果数据帧的列表,其中每个数据帧是前一个结果的2-10相加


如果希望
concat
将它们全部放在一个数据帧中,请使用pd.concat

pd.concat(dfs)

Out[29]:
     a    b   c
0   75   18  17
1   48   56   3
0   77   20  19
1   50   58   5
0   80   23  22
1   53   61   8
0   84   27  26
1   57   65  12
0   89   32  31
1   62   70  17
0   95   38  37
1   68   76  23
0  102   45  44
1   75   83  30
0  110   53  52
1   83   91  38
0  119   62  61
1   92  100  47
0  129   72  71
1  102  110  57

您可以尝试使用
itertools。按如下方式累积

样本数据

df:
    a   b   c
0  75  18  17
1  48  56   3

import itertools

def func(x, y):
    return x + y

dfs = list(itertools.accumulate([df] + list(range(2, 11)), func))

[    a   b   c
 0  75  18  17
 1  48  56   3,     a   b   c
 0  77  20  19
 1  50  58   5,     a   b   c
 0  80  23  22
 1  53  61   8,     a   b   c
 0  84  27  26
 1  57  65  12,     a   b   c
 0  89  32  31
 1  62  70  17,     a   b   c
 0  95  38  37
 1  68  76  23,      a   b   c
 0  102  45  44
 1   75  83  30,      a   b   c
 0  110  53  52
 1   83  91  38,      a    b   c
 0  119   62  61
 1   92  100  47,      a    b   c
 0  129   72  71
 1  102  110  57]
dfs
是结果数据帧的列表,其中每个数据帧是前一个结果的2-10相加


如果希望
concat
将它们全部放在一个数据帧中,请使用pd.concat

pd.concat(dfs)

Out[29]:
     a    b   c
0   75   18  17
1   48   56   3
0   77   20  19
1   50   58   5
0   80   23  22
1   53   61   8
0   84   27  26
1   57   65  12
0   89   32  31
1   62   70  17
0   95   38  37
1   68   76  23
0  102   45  44
1   75   83  30
0  110   53  52
1   83   91  38
0  119   62  61
1   92  100  47
0  129   72  71
1  102  110  57

为了澄清,这个
data\u frames
是一个数据帧列表,可以与
data\u frames=pd.concat(data\u frames,sort=False)
连接,形成一个数据帧,将原始的
df
与循环产生的所有结果结合在一起,对吗?请解释一下为什么
data\u frames[-1]
,哪个获取列表的最后一项,返回一个数据帧?不清楚。@我在回答中编辑了对您评论的回答。为了澄清,此
data\u frames
是可以与
data\u frames=pd.concat(data\u frames,sort=False)
连接的数据帧列表,结果是一个数据帧,它将原始的
df
与循环产生的所有结果相结合,对吗?您介意解释一下为什么取列表最后一项的
data\u frames[-1]
返回一个数据帧吗?我在我的回答中编辑了你评论的答案。