按行更新数据帧但不更新

Sta*_*cey 4 python dataframe pandas

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

#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)
Run Code Online (Sandbox Code Playgroud)

value1 和 value 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
Run Code Online (Sandbox Code Playgroud)

但我只是得到:

         vwap        last       volume     ratio myLong myShort  
0  301.071871  301.221525   43133218.0  1.000497                 
1  215.545413  213.791400  349730738.0  0.991862          
Run Code Online (Sandbox Code Playgroud)

piR*_*red 5

不是分配给行,而是分配回带有索引的数据帧。该行是该行的副本,对它的更改不会保留在父数据框中。

代替:

        row["myValue1"]=value1
        row["myValue2"]=value2
Run Code Online (Sandbox Code Playgroud)

做:

        dayData.loc[idxDay, "myValue1"]=value1
        dayData.loc[idxDay, "myValue2"]=value2
Run Code Online (Sandbox Code Playgroud)

进一步的例子:

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
Run Code Online (Sandbox Code Playgroud)

清楚地表明分配给row不起作用。分配给数据框确实如此。