Python中删除行后,如何重置for循环的迭代变量i?
解决迭代中删除行后重新从第1行遍历的问题
原代码的外层for循环基于初始DataFrame的行枚举,当你在循环内部删除行并重置索引后,循环不会自动从头遍历新的DataFrame。要实现删除行后重启遍历的需求,推荐使用while循环手动控制索引,具体修改如下:
修改后的代码
i = 0 while i < len(Proyectonevera2): if Proyectonevera2.loc[i,'Clave'] == "P": CodIng = Proyectonevera2.loc[i,'Ingrediente'] NuevoInv_Ing = Proyectonevera2.loc[i,'Nuevo Inventario'] if (Proyectonevera2.loc[i,'Clave'] == "N" and Proyectonevera2.loc[i,'Ingrediente'] == CodIng): Proyectonevera2.loc[i,'Inv_Ing'] = NuevoInv_Ing if Proyectonevera2.loc[i,'Cant Ingr SUM'] != 0 and Proyectonevera2.loc[i,'Cant Prod SUM'] != 0: # 注意:原代码中此处的j为未定义变量,推测是笔误,已改为i Proyectonevera2.loc[i,'Cantidad producir'] = Proyectonevera2.loc[i,'Inv_Ing'] * Proyectonevera2.loc[i,'Cant Prod SUM'] / Proyectonevera2.loc[i,'Cant Ingr SUM'] dfc = Proyectonevera2.groupby('CodProducto')['Cantidad producir'] # assign返回新DataFrame,必须重新赋值才能保留修改 Proyectonevera2 = Proyectonevera2.assign(min=dfc.transform(min)) Proyectonevera2.loc[i,'Consumo Agosto'] = Proyectonevera2.loc[i,'min'] * Proyectonevera2.loc[i,'Cant Ingr SUM'] / Proyectonevera2.loc[i,'Cant Prod SUM'] Proyectonevera2.loc[i,'Nuevo Inventario'] = Proyectonevera2.loc[i,'Inv_Ing'] - Proyectonevera2.loc[i,'Consumo Agosto'] bdnevera = Proyectonevera2[Proyectonevera2['Clave']=="P"] nevera.append(bdnevera) Proyectonevera2 = Proyectonevera2.drop(Proyectonevera2[Proyectonevera2['Clave']=="P"].index) Proyectonevera2 = Proyectonevera2.reset_index(drop=True) # 重置索引指针,让循环从头开始 i = 0 continue # 跳过当前循环剩余步骤,直接启动下一轮遍历 # 批量修改相同CodProducto的Clave为"P" Codprod = Proyectonevera2.loc[1,'CodProducto'] for j in range(len(Proyectonevera2)): if Proyectonevera2.loc[j,'CodProducto'] == Codprod: Proyectonevera2.loc[j,'Clave'] = "P" i += 1
关键修改说明
- 替换循环类型:用
while循环替代for enumerate,手动控制遍历索引i,这样可以在需要时重置索引指针。 - 重启遍历逻辑:删除行并重置DataFrame索引后,将
i设为0,并用continue跳过当前循环的剩余代码,直接从头开始遍历新的DataFrame。 - 修复语法错误:
- 原代码中
assign方法未赋值回原DataFrame,导致新增的min列不会生效,现已修正。 - 原代码中
Cantidad producir计算时使用了未定义的j变量,推测是笔误,已改为当前行索引i。
- 原代码中
- 避免索引越界:
while循环的条件i < len(Proyectonevera2)确保遍历不会超出DataFrame的当前行数。
内容的提问来源于stack exchange,提问作者Aleja Gallo
相关产品推荐
相关产品推荐

