【问题标题】:Updating dataframe by row but not updating逐行更新数据帧但不更新
【发布时间】:2019-05-12 04:03:33
【问题描述】:

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

#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 和 value 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          

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

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

    代替:

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

    【讨论】:

    • 请注意df.loc[row_index, "column_name"]=value 可以工作,而df.loc[row_index]["column_name"]=value 不能工作。
    猜你喜欢
    • 1970-01-01
    • 2015-01-30
    • 1970-01-01
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-23
    相关资源
    最近更新 更多