基本上,我有 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},但是,它再次打印数据集而不是数据集“变量名”。
答案 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
而不是列表中。