2016-06-24 27 views
2

我迭代通過數據幀,我試圖將值添加到特定的列的每一行,但是當我打印rulting數據幀中的值不存在更新數據幀由行但不更新

#add two new blank columns to the dayData dataframe 
dayData["myValue1"]="" 
dayData["myValue2"]="" 

#iterate over the dataframe 
for idxDay, row in dayData.iterrows(): 
     do something..... 
     #interate again through the dataframe 
     for idxRange, row1 in dayData.iterrows(): 
      do something else.... 
      calculate value1 
      calculate value2 

     #write the result for value1 and value2 to the dayData dataframe   


     row["myValue1"]=value1 
     row["myValue2"]=value2 
     print(dayData) 

值1和值2的值是正確的,即使當我硬編碼value1 = 1和value2 = 2時,我打印dayData myValue1和myValue2列後面的列應更新它們不包含數據。

產生的dayData數據框應該像

  vwap  last  volume  ratio myLong myShort 
0 301.071871 301.221525 43133218.0 1.000497 1  2  
1 215.545413 213.791400 349730738.0 0.991862 3  3 

而是我只是得到:

  vwap  last  volume  ratio myLong myShort 
0 301.071871 301.221525 43133218.0 1.000497     
1 215.545413 213.791400 349730738.0 0.991862   

如果有人可以幫助我們將不勝感激。

謝謝

回答

2

而不是分配給該行,分配迴帶有索引的數據幀。該行是該行的副本,並且對其進行更改將不會保留在父數據框中。

相反的:

 row["myValue1"]=value1 
     row["myValue2"]=value2 

務必:

 dayData.loc[idxDay, "myValue1"]=value1 
     dayData.loc[idxDay, "myValue2"]=value2 

進一步例如:

df = pd.DataFrame([1], ['a'], ['A']) 

print df 

    A 
a 1 

for i, r in df.iterrows(): 
    r.loc['B'] = 2 

print df 

    A 
a 1 


for i, r in df.iterrows(): 
    df.loc[i, 'B'] = 2 

print df 

    A B 
a 1 2.0 

清楚地表明,分配給row不起作用。分配給數據框呢。