我正在编写一个从NumPy数组(train_data)读取数据的程序,并使用scikit-learn RandomForestClassifier来预测另一个文件中列的结果(测试)。我的所有代码都工作正常,除了我的代码末尾的for循环,它表示从测试文件中获取行并将它们写入外部文件(打开),其中包含0或1的附加列[0]取决于数据不会运行。任何线索为什么?这是相关代码
"""------------------Setting up the files-----------------------"""
testing = csv.reader(open('file_name', 'rb'))
header = testing.next()
opening = csv.writer(open('new_file_name', 'wb'))
"""------------------Setting up the files-----------------------"""
"""----------training and predicting--------------------"""
from sklearn.ensemble import RandomForestClassifier
Forest = RandomForestClassifier(n_estimators = 100)
Forest = Forest.fit(train_data[0::,1::],train_data[0::,0])
Output = Forest.predict(test_data)
"""----------training and predicting--------------------"""
"""------Writing new file-------------"""
final_count = 0
for row in testing:
row.insert(0,Output[final_count])
opening.writerow(row)
final_count += 1
"""------Writing new file-------------"""
我知道这是一个事实,它是for循环因为我添加了一个额外的东西,如果final_count小于5并且它从未打印,将打印“Hello World”。这不是缩进错误,因为那会出现,所以任何人都知道会发生什么?
答案 0 :(得分:1)
根据上述评论,发现OP正在使用testing
的迭代来填充NumPy数组。这个迭代会在文件中向前推进csv
迭代器,一旦它到达结尾,语法for row in testing:
将不再做任何事情(也就是说,迭代器已经到了文件的末尾并且所以没有更多的行要迭代了。)
一个修复方法是首先遍历程序开头的所有testing
行,并将所有数据保存到列表或其他内容中。甚至将csv.reader
与list()
包裹起来也可行(我对csv.reader
与常规生成器/迭代器不太熟悉。)
另一个解决方法是在最后一个循环之前再次实例化testing
对象,再次重新创建csv.reader
。