Python iterrows()时从数据帧读取的值错误

Python iterrows()时从数据帧读取的值错误,python,python-2.7,pandas,scikit-learn,dataframe,Python,Python 2.7,Pandas,Scikit Learn,Dataframe,我构建了一个表示层次结构的数据框架。现在,我尝试迭代地遍历这个数据帧(迭代虽然不好,但我认为这只适用于我的情况),根据我的程序计算更改数据帧的值并删除行 对于前两次迭代,程序正确读取数据帧行。然而,在第三次迭代中(总是),我认为它正在读取旧的值 如果我没有说清楚,这是ipython笔记本: 初始数据帧: c1 c2 c3 c4 19 21 20 14 0.718004 18 20 21 14 0.749271 17 19

我构建了一个表示层次结构的数据框架。现在,我尝试迭代地遍历这个数据帧(迭代虽然不好,但我认为这只适用于我的情况),根据我的程序计算更改数据帧的值并删除行

对于前两次迭代,程序正确读取数据帧行。然而,在第三次迭代中(总是),我认为它正在读取旧的值

如果我没有说清楚,这是ipython笔记本:

初始数据帧:

        c1   c2  c3    c4
   19   21   20  14  0.718004
   18   20   21  14  0.749271
   17   19   18  17  0.724873
   16   18   19  17  0.647143
   15   17   16  11  0.348749
   14   16   17  11  0.847751
   13   15   14   9  0.597245
   12   14   15   9  0.596115
   11   13   12   8  0.549009
   10   12   13   8  0.810719
    9    11   10   7  0.328420
    8    10   11   7  0.859816
    7     9    8   6  0.449287
    6     8    9   6  0.724799
    5     7    6   4  0.320076
    4     6    7   4  0.306391
    3     5    4   2  0.809620
    2     4    5   2  0.450804
    1     3    2   1  0.771699
    0     2    3   1  0.118202
问题代码:

computed_dataframe.sort_values(['c1'], ascending=0, inplace = True)
for index, row in computed_dataframe.iterrows():
    print computed_dataframe
    print row['c3']
    if row['c3'] == 1:
        break
    select_final(row['c3'])
    print computed_dataframe
函数定义

def select_final(check_label): 
.....
.....
    parent_frame = computed_dataframe[computed_dataframe['c1'] == check_label]

    parent_score = get_parent_row_frame.iloc[0]['c4']
    if avg > parent_score:
        for i in child_index:
           computed_dataframe.loc[i,'c2'] = parent_row_frame.iloc[0]['c3']
     computed_dataframe = computed_dataframe[computed_dataframe.c1 != parent_frame.iloc[0]['c1']]
    elif avg <= parent_score:
     computed_dataframe = computed_dataframe[computed_dataframe.c3 != check_label]

return
迭代2:读取索引18。第['c3']行指向9

第二次迭代的结果帧:

        c1   c2  c3    c4
   19   21   20  9  0.718004
   18   20   21  9  0.749271
   17   19   18  17  0.724873
   16   18   19  17  0.647143
   15   17   16  11  0.348749
   14   16   17  11  0.847751
   13   15   14   9  0.597245
   # Deleted with c1 = 14 
   11   13   12   8  0.549009
   10   12   13   8  0.810719
   ......
   ......
        c1   c2  c3    c4
   19   21   20  6  0.718004
   18   20   21  6  0.749271
   17   19   18  17  0.724873
   16   18   19  17  0.647143
   15   17   16  11  0.348749
   .....
   # Deleted row with c1 = 9 
   .........
        c1   c2  c3    c4
   19   21   20  6  0.718004
   18   20   21  6  0.749271
   17   19   18  11  0.724873
   16   18   19  11  0.647143
   #Deleted row with c1 17
   14   16   17  11  0.8477
   .....
   ..... 
   .........
迭代3:读取索引17。行['c3']指向17

第三次迭代的结果帧:

        c1   c2  c3    c4
   19   21   20  9  0.718004
   18   20   21  9  0.749271
   17   19   18  17  0.724873
   16   18   19  17  0.647143
   15   17   16  11  0.348749
   14   16   17  11  0.847751
   13   15   14   9  0.597245
   # Deleted with c1 = 14 
   11   13   12   8  0.549009
   10   12   13   8  0.810719
   ......
   ......
        c1   c2  c3    c4
   19   21   20  6  0.718004
   18   20   21  6  0.749271
   17   19   18  17  0.724873
   16   18   19  17  0.647143
   15   17   16  11  0.348749
   .....
   # Deleted row with c1 = 9 
   .........
        c1   c2  c3    c4
   19   21   20  6  0.718004
   18   20   21  6  0.749271
   17   19   18  11  0.724873
   16   18   19  11  0.647143
   #Deleted row with c1 17
   14   16   17  11  0.8477
   .....
   ..... 
   .........
迭代4:读取索引16。第['c3']行指向11。

然而,程序仍以某种方式将第['c3']行读取为17,然后我在执行函数时遇到了错误,因为它在c1中找不到与17对应的任何匹配项,因此,我的计算结果是被零错误除。我无法理解从哪里它仍然读c3作为17。打印的数据框显示该索引处的更新值为11


有人能帮我解决这个错误吗?它是从哪里冒出来的?

这是我的错误。我正在更新我迭代的同一个数据帧