逐行更新数据但不更新

时间:2016-06-24 16:14:59

标签: python pandas dataframe

我正在迭代数据框,我正在尝试为每行的特定列添加值,但是当我打印结果数据框时,值不存在

#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)

value1和value2的值是正确的,即使我在打印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          

1 个答案:

答案 0 :(得分:3)

不是分配给行,而是使用索引分配回数据帧。该行是该行的副本,对其的更改将不会保留在父数据帧中。

而不是:

        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不起作用。分配给数据框确实。