2017-06-15 101 views
2

我創建了一個數據框字典來存儲我的數據。我需要爲每個數據框做一些東西,我試圖使用iteritems()遍歷字典。但不知何故,我似乎無法對數據幀做任何事情。代碼編譯並不會拋出任何錯誤,它似乎沒有做任何事情。在使用iteritems時在字典中操作熊貓數據框()

這裏我的代碼的簡化:

這只是讓dataframes

dic={} 
df1=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df2=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df3=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df4=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 
df5=pd.DataFrame(np.random.randn(10,5),columns=['a','b','c','d','e']) 

dic[1]=df1 
dic[2]=df2 
dic[3]=df3 
dic[4]=df4 
dic[5]=df5 

的樣本字典,這是一組基本的東西我想要做的每個數據幀。

for key, item in dic.iteritems(): 
    item=item.reset_index()  
    item['Rank']=(item.index)+1 

因此,迭代之後我期待每一個數據幀有一個與舊索引一個額外的列,另有額外的列與「等級」,例如:

Expected

相反,據幀似乎是操作的影響,看起來和以前一樣:

Reality

我也嘗試在迭代中使用臨時數據框,然後嘗試將其寫入「item」中,並得到相同的結果。我只是想知道我想要做什麼甚至可能,或者我可能需要繞過它,並使用不同的方法來實現我的目標。

回答

0

我認爲你需要分配DataFrame背部而已,也若想python 2 and 3代碼使用items()

for key, item in dic.items(): 
    item=item.reset_index()  
    item['Rank']=(item.index)+1 
    dic[key] = item 

print (dic[1]) 
    index   a   b   c   d   e Rank 
0  0 -1.085631 0.997345 0.282978 -1.506295 -0.578600  1 
1  1 1.651437 -2.426679 -0.428913 1.265936 -0.866740  2 
2  2 -0.678886 -0.094709 1.491390 -0.638902 -0.443982  3 
3  3 -0.434351 2.205930 2.186786 1.004054 0.386186  4 
4  4 0.737369 1.490732 -0.935834 1.175829 -1.253881  5 
5  5 -0.637752 0.907105 -1.428681 -0.140069 -0.861755  6 
6  6 -0.255619 -2.798589 -1.771533 -0.699877 0.927462  7 
7  7 -0.173636 0.002846 0.688223 -0.879536 0.283627  8 
8  8 -0.805367 -1.727669 -0.390900 0.573806 0.338589  9 
9  9 -0.011830 2.392365 0.412912 0.978736 2.238143 10 
+0

人,這是真棒。它像一個魅力!我知道我只是失去了一些東西。 –

+0

現在,我有你在這裏,iteritems()和items()之間有什麼區別... iseritems()已棄用? –

+0

對我來說很難,但[這裏](https://stackoverflow.com/a/3294899/2901002)它解釋得更好。 – jezrael

-1

分配項目的數據幀回DIC [關鍵]

for key, item in dic.items(): 
    item=item.reset_index()  
    item['Rank']=(item.index)+1 
    dic[key] = item 
+0

剛來晚了一點,但你也明白了!謝謝 ! –