0

我正在编写一个程序,它从 NumPy 数组(train_data)读取数据并使用 scikit-learn RandomForestClassifier 来预测另一个文件中的列的结果(测试)。我的所有代码都可以正常工作,除了我的代码末尾的 for 循环说从测试文件中获取行并将它们写入外部文件(打开),并带有一个额外的列 [0],其中 0 或 1 取决于数据不会运行。关于为什么的任何线索?这是相关代码

"""------------------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”。这不是缩进错误,因为会出现这种情况,所以有人知道会发生什么吗?

4

1 回答 1

1

根据上面的评论,可以看出 OP 正在使用迭代testing来填充 NumPy 数组。此迭代将csv在文件中向前推进迭代器,一旦它到达末尾,语法for row in testing:将不再执行任何操作(即,迭代器已到达文件末尾,因此没有更多行可迭代) .

一种解决方法是首先遍历testing程序开头的所有行并将所有数据保存到列表或其他内容中。也许甚至包装csv.readerwithlist()都可以(我不太熟悉csv.reader与常规生成器/迭代器相比)。

另一个解决方法是通过在最终循环之前testing再次实例化对象来重新创建。csv.reader

于 2013-04-10T14:10:35.313 回答