Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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_List_Dataframe_For Loop - Fatal编程技术网

Python 如何迭代数据帧列表?

Python 如何迭代数据帧列表?,python,pandas,list,dataframe,for-loop,Python,Pandas,List,Dataframe,For Loop,基本上,我有5个pd.dataframes,名为=df0、df1、df2、df3、df4。我想做的是使用for循环向这5个数据帧添加数据。类似于: 但是,当您这样做时(或使用单独列表而不是枚举时),“dataset”返回数据集,而不是名称(即df0)。我怎样才能解决这个问题。例如,第二次迭代的输出应为: 编辑:我也尝试过字典,例如{'df0':df0…etc},但是,它再次打印数据集而不是数据集“变量名”。编辑:重写解决方案以提供一些适当的实践 所以问题是你有一大堆的值需要通过重新分配来更新。如

基本上,我有5个pd.dataframes,名为=
df0、df1、df2、df3、df4
。我想做的是使用for循环向这5个数据帧添加数据。类似于:

但是,当您这样做时(或使用单独列表而不是枚举时),“dataset”返回数据集,而不是名称(即df0)。我怎样才能解决这个问题。例如,第二次迭代的输出应为:


编辑:我也尝试过字典,例如{'df0':df0…etc},但是,它再次打印数据集而不是数据集“变量名”。

编辑:重写解决方案以提供一些适当的实践

所以问题是你有一大堆的值需要通过重新分配来更新。如果你有df1,df2,…,可能你更愿意把它们列在一个列表中

无论如何,使用列表也是我解决这个问题的方法

dfs = [df0, df1, df2, ...]
dfs = [pd.concat([df, NEW_DATA]) for df in dfs]
[df0, df1, df2, ...] = dfs

看看,如果您只是一般使用
dfs
,并参考
dfs[0]
而不是
df0
,这个解决方案是如何免费提供的?

您可以将新的
df
重新分配到您的列表中:

#设置示例
df0=pd.DataFrame(np.random.randint(0,10,(3,2)))
df1=pd.DataFrame(np.random.randint(0,10,(3,2)))
df2=pd.DataFrame(np.random.randint(0,10,(3,2)))
#然后
lst=[df0,df1,df2]
对于i,枚举中的df(lst):
newdata=pd.DataFrame([[0,0],[0,0]])#(比如说)
lst[i]=df.append(newdata)
df0,df1,df2=lst
>>df0
0  1
0  8  7
1  9  1
2  5  6
0  0  0
1  0  0

但是,顺便说一句,如果您想通过名称而不是索引来引用数据帧集合,那么最好将数据帧集合存储在一个
目录中而不是列表中。

那么
pd.concat([df0,df1,df2,df3,df4])如何?
?这不起作用。由于数据插补算法的原因,这些数据集应包含不同的值。该算法输出5个不同版本的“猜测”缺失数据,我想将其附加到单独的数据集(在本例中为df0…df4)。基本上,我尝试的是运行一个输出N个数据帧的数据插补算法(在本例中为5)。我运行了Y次算法(每个位置都有一个缺失值),我想将5个数据帧中的每一个都附加到我创建的数据帧中:df0、df1、df2、df3、df4。不清楚为什么需要数据帧的名称?好的,我可能知道你的意思:你想重新分配给有问题的数据帧,但按照你的方式,它只会用一个新值覆盖局部变量,但不会更改原始值。通过写回
d[name]
,这可能会修复它
for i, dataset in enumerate([df0,df1,df2,df3,df4]):
    df1 = pd.concat([df1, NEW_DATA])
dfs = [df0, df1, df2, ...]
dfs = [pd.concat([df, NEW_DATA]) for df in dfs]
[df0, df1, df2, ...] = dfs