2015-06-30 219 views
0

我只是想添加存儲在字典數據幀。直覺上我想循環字典。但是,我沒有一個初始數據框與零值。優雅地完成這件事的最好方法是什麼?目前,我做了以下內容:Python的大熊貓DataFrames

dict = {'B' :df1, 'C':df2, 'D': df3} 

total = dict['B'] + dict['C'] + dict['D'] 

的DFS是從csv文件閱讀和有可能超過3

我怎樣才能在一個循環中完成這個初始化?

回答

1

您可以通過字典值concat,例如:

In [195]: 
d = {} 
d['a'] = pd.DataFrame({'a':np.arange(5)}) 
d['b'] = pd.DataFrame({'b':np.arange(5)}) 
total = pd.concat(d.values(), axis=1) 
total.sum() 

Out[195]: 
a 10 
b 10 
dtype: int64 
1

假設你想添加(和another answer如不串聯)這些DataFrames你可以使用類似以下內容:

#!/usr/bin/env python3 
# coding: utf-8 

import pandas as pd 
import numpy as np 

df1 = pd.DataFrame(np.random.rand(3,2)) 
df2 = pd.DataFrame(np.random.rand(3,2)) 
df3 = pd.DataFrame(np.random.rand(3,2)) 
df4 = pd.DataFrame(np.random.rand(3,2)) 

d = {'a': df1, 'b': df2, 'c': df3, 'd': df4} 
total = 0  

for key, df in d.items(): 
    total += df 
+0

以下是錯誤我得到:--- -------------------------------------------------- ---------------------- NameError Traceback(最近呼叫的最後一個) in () 11 for鍵,DF在d.items(): ---> 12總+ = DF NameError:name'total'未定義 –

+0

@AlMerchant:你說得對。我忘了初始化變量total,並相應地編輯了我的答案。對不起。 – albert

+0

我想這個問題歸結到我怎麼知道Python中的變量是否是未定義的? –

0

您可以創建一個面板,然後求和:

pd.Panel(dict).sum() 

在一個側面說明,它不是覆蓋內置dict功能

0

最好的做法只是爲了完整性,這裏是演示問題和解決方案:

import pandas as pd 
import numpy as np 

df1 = pd.DataFrame(np.random.rand(3,2)) 
df2 = pd.DataFrame(np.random.rand(3,2)) 
df3 = pd.DataFrame(np.random.rand(3,2)) 
df4 = pd.DataFrame(np.random.rand(3,2)) 

d = {'a': df1, 'b': df2, 'c': df3, 'd': df4} 

for key, df in d.items(): 
    if 'total' in locals(): 
     print("found") 
     total += df 
    else: 
     print("not") 
     total = df 

print(total) 
del total