首页 > 解决方案 > 如何修改我正在迭代的 pandas 数据框?

问题描述

我知道 - 这是禁止的。但是当 optimize.curve_fit 遇到一行(可能是 5 个)相同的值时,它会退出并返回一条直线。

我不想删除所有重复项,但我想我可能会删除任何相同三胞胎的中间成员,而不会对合身造成太大损害。

所以我想使用 iterrows,并在我去的时候删除行,但我知道我可能正在处理副本,而不是原件。

或者,我可以用索引做一个老式的循环。

我怎样才能安全地做到这一点,并且每次删除时都会更新循环的结束参数?

这是一个例子:

i = 1
while i < len(oneDate.index)-1:
    print("triple=",oneDate.at[i-1,"Nprem"],oneDate.at[i,"Nprem"],oneDate.at[i+1,"Nprem"])
    if oneDate.at[i,"Nprem"]==oneDate.at[i-1,"Nprem"] and oneDate.at[i,"Nprem"]==oneDate.at[i+1,"Nprem"]:
        print("dropping i=",i,oneDate.at[i,"Nprem"])
        oneDate.drop([i])
        oneDate = oneDate.reset_index(drop=True)
        pause()
    else: i = i +1

我假设当我放下并重置时,下一个项目将移动到已删除的插槽中,因此我不必增加索引。但它没有,所以我得到了一个无限循环。

标签: pythonpandasloopsscipy

解决方案


好的,我找到了 , inplace=True 选项,它现在可以正常工作了。


推荐阅读