[英]how to iterate over list of dataframes?
基本上,我有 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)。 我該如何解決這個問題。 例如,第二次迭代的 output 應該是:
for i, dataset in enumerate([df0,df1,df2,df3,df4]): df1 = pd.concat([df1, NEW_DATA])
編輯:我也嘗試過字典,例如 {'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
重新分配到您的列表中:
# 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
而不是列表中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.