如何迭代数据框列表?

时间:2021-04-15 09:35:07

标签: python pandas list dataframe for-loop

基本上,我有 5 个 pd.dataframes,named= df0, df1, df2, df3, df4。我想做的是使用 for 循环将数据添加到这 5 个数据帧。类似的东西:

<块引用>
for i, dataset in enumerate([df0,df1,df2,df3,df4]):
    dataset = pd.concat([dataset, NEW_DATA])

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

<块引用>
for i, dataset in enumerate([df0,df1,df2,df3,df4]):
    df1 = pd.concat([df1, NEW_DATA])

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

2 个答案:

答案 0 :(得分:0)

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

所以问题是你有一堆值需要通过重新分配来更新。如果您有 df1、df2、...,也许您更愿意将它们放在列表中。

无论如何使用列表也是我解决问题的方式。

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

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

答案 1 :(得分:0)

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

# setup example
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)))

# then
lst = [df0, df1, df2]
for i, df in enumerate(lst):
    newdata = pd.DataFrame([[0,0], [0,0]])  # (say)
    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

但是,顺便说一句,如果您想通过名称而不是索引来引用它们,最好将您的 DataFrames 集合存储在 dict 而不是列表中。