2016-06-24 8 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の値は正しく、dayDataを印刷するときに私がハードコードvalue1 = 1とvalue2 = 2を指定しても、列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に割り当てることが機能しないことを示しています。データフレームへの割り当てが行います。

関連する問題