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