我遇到了Python Key Error,并且无法对其进行排序。
给出的错误如下所示
Traceback (most recent call last):
File "<pyshell#4>", line 1, in <module>
import handling_data_
File "C:\Python27\handling_data_.py", line 453, in <module>
main()
File "C:\Python27\handling_data_.py", line 443, in main
pans.append([row[0],p.classify(row)])
File "C:\Python27\handling_data_.py", line 367, in classify
cgclass = self.greater_class_prob_dist[query[2]]
KeyError: ' Without-pay'
有问题的行是
clclass = self.less_class_prob_dist[query[2]]
我不知道这行有什么问题,因为还有另一行为greater_class_prob_dist
cgclass = self.greater_class_prob_dist[query[2]]
该类是一个朴素的贝叶斯实现,如果从包含&#39;的文本文件中获取条目,它可以完美地工作。如果没有支付&#39;否则它没有。
有谁知道如何解决这个问题?
如果人们需要查看或运行它以查看问题,这是一个指向整个类和文本文件的链接 Source Code
任何有用的帮助
编辑: 记录打印包含&#39;如果没有支付&#39;
['tst1249', 62, ' Without-pay', 170114, ' Assoc-acdm', 12, ' Married-civ-spouse', ' Farming-fishing', ' Husband', ' White', ' Male', 0, 0, 50, ' United-States', '?']
答案 0 :(得分:1)
如果查看trainingset.txt
中的所有条目,您会看到Without-pay
的所有条目都列为<=50k
收入。正如您在__init__
中所看到的,培训数据分为两组:
for row in data:
if row[15] == ' >50K':
self.greaterThan_data.append(row)
else:
self.lessThan_data.append(row)
由于Without-pay
个条目都没有>50k
收入,因此没有一个条目进入greaterThan_data
。
所以当你打电话......
self.greater_class_prob_dist = self.getCatProbs(self.greaterThan_data,2)
..由此产生的dict缺少那把钥匙。