15

我正在编写以下代码,用于在训练集和测试集上执行随机森林分类;

from sklearn.ensemble import RandomForestClassifier
from numpy import genfromtxt, savetxt

def main():
    dataset = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8')   
    target = [x[0] for x in dataset]
    train = [x[1:] for x in dataset]
    test = genfromtxt(open('filepath','r'), delimiter=' ', dtype='f8')

    rf = RandomForestClassifier(n_estimators=100)
    rf.fit(train, target)
    predicted_probs = [[index + 1, x[1]] for index, x in enumerate(rf.predict_proba(test))]

    savetxt('filepath', predicted_probs, delimiter=',', fmt='%d,%f', 
            header='Id,PredictedProbability', comments = '')

if __name__=="__main__":
    main()

但是我在执行时收到以下错误;

---->      dataset = genfromtxt(open('C:/Users/user/Desktop/pgm/Cora/a_train.csv','r'), delimiter='', dtype='f8')

ValueError: Some errors were detected !
    Line #88 (got 1435 columns instead of 1434)
    Line #93 (got 1435 columns instead of 1434)
    Line #164 (got 1435 columns instead of 1434)
    Line #169 (got 1435 columns instead of 1434)
    Line #524 (got 1435 columns instead of 1434)
...
...
...

关于如何避免它的任何建议?谢谢。

4

8 回答 8

15

genfromtxt如果列数不相等,将给出此错误。

我可以想到 3 种方法来解决它:

1.使用usecols参数

np.genfromtxt('yourfile.txt',delimiter=',',usecols=np.arange(0,1434))

但是 - 这可能意味着您丢失了一些数据(其中行长于 1434 列) - 这是否重要取决于您。

2. 调整您的输入数据文件,使其具有相同数量的列。

3.使用其他东西genfromtxt:

.............像这样

于 2014-04-29T12:15:13.783 回答
6
于 2018-03-16T15:20:40.783 回答
4

您的某一行中有太多列。例如

>>> import numpy as np
>>> from StringIO import StringIO
>>> s = """
... 1 2 3 4
... 1 2 3 4 5
... """
>>> np.genfromtxt(StringIO(s),delimiter=" ")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib64/python2.6/site-packages/numpy/lib/npyio.py", line 1654, in genfromtxt
    raise ValueError(errmsg)
ValueError: Some errors were detected !
    Line #2 (got 5 columns instead of 4)
于 2014-04-29T00:47:29.577 回答
4

就我而言,该错误是由于行中有一个特殊符号而引起的。

错误原因:有特殊字符,如

  • '#' 哈希
  • ',' 鉴于您的 (delimiter = ',')

示例 csv 文件

  • 1,你好,#this,失败
  • 1,你好,',这个',失败

    - - -代码 - - -

    import numpy as numpy data = numpy.genfromtxt(file, delimiter=delimeter) #Error

环境说明:

操作系统:Ubuntu

csv 编辑器:LibreOffice

IDE:Pycharm

于 2018-10-11T06:44:01.803 回答
2

以前的答案都没有对我有用,所以对于未来的谷歌人来说,这里是另一个答案:

错误是:"Line #88 (got 1435 columns instead of 1)"

发现我的 csv 文件是一个带有 BOM 的 utf8 编码文本文件(在文件的第一行标记编码的字符。大多数文本编辑器会隐藏这个字符)

我只是在Windows的记事本中打开它,再次“另存为”并在保存框底部选择“ANSI”。

为我修好了。

于 2020-09-18T23:41:19.703 回答
1

似乎包含列名的标题比数据本身多 1 列(标题上的 1435 列与数据上的 1434 列)。

您可以:

1) 从标题中删除对数据没有意义的 1 列

或者

2) 例如,使用 genfromtxt() 中的跳过标头,np.genfromtxt('myfile', skip_header=*how many lines to skip*, delimiter=' ') 更多信息可在文档中找到。

于 2016-10-13T19:10:38.403 回答
1

我有这个错误。原因是我的数据中有一个有空格的条目。这导致它将其视为额外的行。确保所有数据中的所有间距都是一致的。

于 2015-12-01T17:55:46.833 回答
0

当我还尝试使用 genfromtext 加载文本数据集并使用 Keras 进行文本分类时,我也遇到了这个错误。

数据格式为:[some_text]\t[class_label]. 我的理解是,第一列中有一些字符会以某种方式混淆解析器,并且这两列无法正确拆分。

data = np.genfromtxt(my_file.csv, delimiter='\t', usecols=(0,1), dtype=str);

此代码段与您的代码段创建了相同的 ValueError ,我的第一个解决方法是将所有内容读取为一列:

data = np.genfromtxt(my_file, delimiter='\t', usecols=(0), dtype=str);

稍后自己拆分数据。

但是,最终正常工作的是在 genfromtxt 中显式定义注释参数。

data = np.genfromtxt(my_file, delimiter='\t', usecols=(0,1), dtype=str, comments=None);

根据文档:

可选参数comments 用于定义标记注释开头的字符串。默认情况下,genfromtxt 假定 comments='#'。注释标记可以出现在行的任何位置。注释标记后出现的任何字符都将被忽略

指示注释的默认字符是“#”,因此如果该字符包含在您的文本列中,则后面的所有内容都将被忽略。这可能是 genfromtext 无法识别这两列的原因。

于 2018-02-28T10:58:23.253 回答