【问题标题】:How to solve a Keyerror in python for-loop that occurs when reaching the end of the loop如何解决python for-loop中到达循环末尾时发生的Keyerror
【发布时间】:2021-08-14 20:35:03
【问题描述】:

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

代码在正确创建新df的意义上工作,但它给出了关键错误。我知道循环没有检测到如何停止。似乎有一个非常简单的解决方案,但到目前为止我还无法修复它。 这是代码。

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  

任何帮助都会非常感激。

【问题讨论】:

    标签: python pandas dataframe for-loop keyerror


    【解决方案1】:

    问题在于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  
    

    【讨论】:

    • 是的,这正是我想要的。我注意到了这个错误,但仍在学习,所以我没有想出一个解决方案。现在完美运行,感谢您的帮助!
    【解决方案2】:

    如果 KeyError 在您自己的代码中从失败的字典键查找中引发,您可以使用 .get() 返回在指定键处找到的值或默认值.....或尝试使用 raise KeyError (留言)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-20
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      相关资源
      最近更新 更多