带Pandas的Python-keyrerror:u';标签[422]不在[索引]中

带Pandas的Python-keyrerror:u';标签[422]不在[索引]中,python,pandas,Python,Pandas,我有一个python代码,使用pandas模块,从.csv文件中获取数据,并将其放入pandas数据框中。然后,我必须将列表中的值与数据框中的值进行比较。由于我在列表中定义了一些数据帧中不存在的索引,因此我在这里得到了错误: for i in sorted(thresholds.keys()): current=acme_current_data.loc[i, 'Recent-Server'] KeyError:u'标签[422]不在[索引]中 我需要您的帮助,以了解如何在继续避免错误

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

for i in sorted(thresholds.keys()):
    current=acme_current_data.loc[i, 'Recent-Server']
KeyError:u'标签[422]不在[索引]中

我需要您的帮助,以了解如何在继续避免错误之前检查使用的索引是否存在。在我的例子中,索引数据帧或检查长度不是有用的解决方案

我试过这样的方法,但都不管用:

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

提前谢谢


在这里,我给您一个完整的示例(简化)来查看错误。首先,您必须创建一个包含要处理的内容的source.csv文件:

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
然后,使用本文下面的代码创建test.py。如果在分配
current=current\u data.loc[I,'Recent Server']
之前,我有办法检查
current\u data.loc[I,'Recent Server']
是否存在,我的问题就会解决。有什么建议吗

import os, sys
import pandas as pd

def compare(name,current_data,thresholds):
    reference=current_data.loc['INVITE','Recent-Server']
    # Check if we have INVITES events
    if reference == '0':
        print "{}: critical status".format(name)
        return

    for i in sorted(thresholds.keys()):
        try:
            current=current_data.loc[i, 'Recent-Server']
            if current != '0':              
                valor=thresholds[i]
        except IndexError:
            print "Index Error"

clear="source.csv"
current = pd.read_csv(clear, names=['Message','Event','Recent-Server','Total-Server','PerMax-Server','Recent-Client','Total-Client','PerMax-Client'])
current.set_index("Message", inplace=True)
responses_all=("100", "180", "181", "182", "183", "200", "5xx")

# Thresholds for each event type
thresholds_mia={
responses_all[0]: ["value1"],   #100 Trying         
responses_all[1]: ["value2"],   #180 Ringing        
responses_all[2]: ["value3"],   #181 Forwarded      
responses_all[3]: ["value4"],   #182 Queued         
responses_all[4]: ["value5"],   #183 Progress       
responses_all[5]: ["value6"],   #200 OK             
responses_all[6]: ["value7"]    #5xx Server Error   
}

# Main
compare("Name",current,thresholds_mia)

感谢您提供完整的代码示例,这非常有帮助。我在评论工作中提出的两项建议:

选项1:使用正确的异常 如果将代码中的
除索引器
替换为
除键错误
,代码将打印“索引错误”五次。有问题的片段:

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")
请注意,我检查了当前_data.index中数据帧的索引
I。您尝试的(
i in current_data.loc.index
)是一个语法错误,因为不是
loc
有索引,而是数据帧
current_data
本身


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

除了索引错误
似乎有些奇怪,您是否在其他地方定义了
索引错误
?很可能您想要的是
除索引器之外的
,您可以(1)
除KeyError
(查看您的错误!),或者(2)在acme\u current\u data.index中使用
i检查是否存在。如果这不能解决您的问题,请发布一篇包含数据文件的文章。如果您制作了一个可复制的示例,或者至少在上面放置了一个数据帧的标题,会更容易。好的,我制作了一个简单的示例来复制错误。谢谢。@scnerd你说得对,但是错误还在继续。太好了!!谢谢你,艾哈迈德!我试过使用它们,两种解决方案都有效!:)再次感谢!
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")
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]