簡體   English   中英

如何迭代數據框列表?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM