如何解决到达循环末尾时发生的 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
我正在现有 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