numpy中有"1列而不是......"错误

use*_*132 11 python numpy genfromtxt

我正在研究以下代码,用于在火车和测试集上执行随机森林分类;

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()
Run Code Online (Sandbox Code Playgroud)

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

---->      dataset = genfromtxt(open('C:/Users/Saurabh/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)
...
...
...
Run Code Online (Sandbox Code Playgroud)

有关如何避免它的任何建议?谢谢.

ato*_*3ls 12

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

我可以想到3种方法:

1.使用usecols参数

np.genfromtxt('yourfile.txt',delimiter=',',usecols=np.arange(0,1434))
Run Code Online (Sandbox Code Playgroud)

但是 - 这可能意味着您丢失了一些数据(行数超过1434列) - 无论重要性是由您决定的.

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

3.使用除以外的东西 genfromtxt:

..... 这样的


zee*_*han 5

如果检测到列数不一致,则会引发异常。可能有多种原因和解决方案。

  1. 添加invalid_raise = False以跳过违规行。

    dataset = genfromtxt(open('data.csv','r'), delimiter='', invalid_raise = False)

  2. 如果您的数据包含名称,请确保字段名称不包含任何空格或无效字符,或者它与标准属性的名称(如大小或形状)不对应,这会混淆解释器。

  1. deletechars

    给出一个字符串,该字符串组合了必须从名称中删除的所有字符。默认情况下,无效字符是 ~!@#$%^&*()-=+~\|]}[{';: /?.>,<.

  2. excludelist

    给出要排除的名称列表,例如return, file, print…如果输入名称之一是此列表的一部分,则将在其后附加下划线字符 ('_')。

  3. case_sensitive

    名称是否应区分大小写 ( case_sensitive=True)、转换为大写 (case_sensitive=False或case_sensitive='upper') 或小写 ( case_sensitive='lower')。

data = np.genfromtxt("data.txt", dtype=None, names=True,\
       deletechars="~!@#$%^&*()-=+~\|]}[{';: /?.>,<.", case_sensitive=True)
Run Code Online (Sandbox Code Playgroud)

参考:numpy.genfromtxt


use*_*424 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)
Run Code Online (Sandbox Code Playgroud)