如何解决到达循环末尾时发生的 python for 循环中的 Keyerror

How to solve a Keyerror in python for-loop that occurs when reaching the end of the loop

我正在现有 df 中创建一个新列,其中包含 i+1 位置上一列的值。这意味着新列的最后一个值将保持为空。

从正确创建新 df 的意义上来说,代码是有效的,但它给出了密钥错误。我 udnerstand 循环没有检测到如何停止。似乎有一个非常简单的解决方案,但到目前为止我还无法修复它。 这是代码。

data = [['scn1', 100, ''], ['scn1', 150, ''], ['scn1', 300, '']]    
OCS = pd.DataFrame(data, columns = ['scn', 'FROM', 'TO'])

for i in OCS.index:
        a = i
        i = i+1
        lastvld = OCS.loc[i].FROM  
        maxloop = len(OCS)
        if a <= maxloop:
            OCS.loc[a, 'TO'] = lastvld  

非常感谢任何帮助。

如果 KeyError 是由您自己的代码中的字典键查找失败引发的,您可以使用 .get() 来 return 在指定键处找到的值或默认值.... .或者尝试使用 raise KeyError(message)

问题出在 i = i+1 行。 for 循环将用索引中的每个值更新 i,因此您根本不需要这样做。在循环内递增 i 会分配一个不在您的索引中的值。

我认为您想要做的是将下一行中的 TO 列设置为 FROM 值,除了最后一行。试试这个:

import pandas as pd

data = [['scn1', 100, ''], ['scn1', 150, ''], ['scn1', 300, '']]
OCS = pd.DataFrame(data, columns = ['scn', 'FROM', 'TO'])

maxloop = OCS.index.max()

for i in OCS.index:
    if i < maxloop:
        lastvld = OCS.loc[i+1].FROM
        OCS.loc[i, 'TO'] = lastvld

print(OCS)

输出:

    scn  FROM   TO
0  scn1   100  150
1  scn1   150  300
2  scn1   300