如何解决功能列标题的参数时,csvdictreader的KeyError不起作用
这是我的代码,我不断遇到关键错误。我已经在我的班级的初始化代码中打开了该文件,但是问题是我一直在为此文件获取KeyError。我知道当我在函数中打开文件时它可以工作,但是当我在函数外打开文件时它却无法工作并且出现KeyError。如果您需要完整的代码,请告诉我。除了导入csv,我不能为此使用pandas或任何其他模块。我知道这样做会更容易:)
def calc_avg(self,specific,filter,logic,threshold):
'''calculates avg for the column determine by specific based off the filter parameters given by
filter,threshold'''
if isinstance(threshold,str):
threshold = float(threshold)
running_sum = 0
running_count = 0
for row in csv.DictReader(self.load_data):
value = int(row[filter])
if logic == 'lt' and value < threshold:
include = True
elif logic == 'gt' and value > threshold:
include = True
elif logic == 'lte' and value <= threshold:
include = True
elif logic == 'gte' and value >= threshold:
include = True
else:
include = False
if include:
running_sum += int(row[specific])
running_count += 1
return (round(running_sum / running_count,2))
命令是
print(csv_data.calc_avg("Length_of_stay",filter="SOFA",logic="lt",threshold="15"))
我得到的错误是:
value = int(row[filter])
KeyError: 'SOFA'
Sample Data:
RecordID SAPS-I SOFA Length_of_stay
132539 6 1 5
132540 16 8 8
132541 21 11 19
132545 17 2 4
132547 14 11 6
132548 14 4 9
132551 19 8 6
132554 11 0 17
完整代码:
class HWReader():
def __init__(self,load_data):
'''initializer that sets filename as a parameter that can be used within all functions'''
self.load_data = open(load_data,"r")
def get_saps(self,record_name):
'''finds the saps score for a record name'''
for row in csv.DictReader(self.load_data,delimiter = ','):
if row['RecordID'] == record_name:
return (row['SAPS-I'])
def calc_avg(self,str):
threshold = float(threshold)
avg_file = csv.DictReader(self.load_data)
running_sum = 0
running_count = 0
for row in avg_file:
value = int(row[filter])
if logic == 'lt' and value < threshold:
include = True
elif logic == 'gt' and value > threshold:
include = True
elif logic == 'lte' and value <= threshold:
include = True
elif logic == 'gte' and value >= threshold:
include = True
else:
include = False
if include:
running_sum += int(row[specific])
running_count += 1
return (round(running_sum / running_count,2))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。