Python 如何迭代数据帧列表?
基本上,我有5个pd.dataframes,名为=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},但是,它再次打印数据集而不是数据集“变量名”。编辑:重写解决方案以提供一些适当的实践 所以问题是你有一大堆的值需要通过重新分配来更新。如
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