Python与Pandas - KeyError:你'标签[422]不在[index]中

时间:2018-04-17 21:23:48

标签: python pandas

我有一个python代码,使用pandas模块,我从.csv文件中获取数据到pandas数据帧。然后,我将列表中的值与pandas数据帧的值进行比较。由于我在列表中定义了一些在数据帧中不存在的索引,因此我得到错误:

<svg id="background" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<g id="group"></g>
</svg>

KeyError:u&#39;标签[422]不在[index]

我需要你的帮助才能知道如何在继续避免错误之前检查所使用的索引是否存在。在我的情况下,索引数据框或检查长度并不是有用的解决方案。

我尝试过这样的事情,但他们不能工作:

for i in sorted(thresholds.keys()):
    current=acme_current_data.loc[i, 'Recent-Server']

或者:

for i in sorted(thresholds.keys()):
    if acme_current_data.loc[i, 'Recent-Server']:
        current=acme_current_data.loc[i, 'Recent-Server']

提前致谢。

这里我给你一个完整的例子(简化)来查看错误。首先,yoy必须制作一个source.csv文件,并对此内容进行处理。

for i in sorted(thresholds.keys()):
    try:
        current=acme_current_data.loc[i, 'Recent-Server']
    except INDEX_ERROR:
        print "Error"

然后,使用此文本下的代码的test.py。如果我在使用INVITE,Requests,60,77340232,13674,59,74062475,13504 Retransmissions,0,5387,34,0,114838,2474 100,Trying,57,77039746,13590,59,73752071,13420 180,Ringing,47,37411523,7067,41,36984407,6982 486,Busy Here,2,3689189,819,2,3689238,819 487,Terminated,13,21531195,3687,13,21531766,3687 488,Not Acceptable,0,39326,24,0,30665,22 491,Req Pending,0,121,4,0,118,4 4xx,Client Error,0,1,1,0,1,1 进行分配之前检查current_data.loc[i, 'Recent-Server']是否存在,我的问题将会得到解决。有什么建议吗?

current=current_data.loc[i, 'Recent-Server']

1 个答案:

答案 0 :(得分:2)

感谢您提供完整的代码示例,这非常有用。在我的评论中提出的两个建议都是:

选项1:使用正确的异常

如果您使用except IndexError替换代码中的except KeyError,您的代码将打印“索引错误”五次。有问题的片段:

for i in sorted(thresholds.keys()):
    try:
        current = current_data.loc[i, 'Recent-Server']
        if current != '0':
            valor = thresholds[i]
    except KeyError: # <------------------------ use the right exception
        print("Index Error")

选项2:在访问

之前检查成员资格的索引

或者,您可以在访问之前检查数据框的索引,如下所示:

for i in sorted(thresholds.keys()):
    if i in current_data.index:
        current = current_data.loc[i, 'Recent-Server']
        if current != '0':
            valor = thresholds[i]

请注意,我检查了数据框的索引i in current_data.index。您尝试的内容(i in current_data.loc.index)是语法错误,因为它不是loc具有索引而是数据框current_data本身。

这两种技术都有效。我更喜欢#2。