【问题标题】:How can solve this issue "cannot be considered a valid collection"如何解决这个问题“不能被认为是有效的集合”
【发布时间】:2019-05-14 16:45:11
【问题描述】:

我正在下面运行此代码,但我收到一个可能来自这行代码的错误

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=random_state, test_size=test_size)

我在这个平台上发现了类似的问题,但提供的解决方案与我的问题不符。显示的错误是:

Singleton array array(0) cannot be considered a valid collection

请帮助我。

@permission_required('admin.can_add_log_entry')
def upload_file(request):
    template='upload_file.html'
    if request.method == 'GET':
        return render(request, template)
    CSV_file=request.FILES['csv_file']
    if not CSV_file.name.endswith('.csv'):
        messages.error(request, 'This is not a CSV file')
        # return HttpResponseRedirect(reverse('add_pull_requests'))
    data_set=CSV_file.read().decode('UTF-8')
    io_string=StringIO(data_set)
    next(io_string)
    dataset=csv.reader(io_string, skipinitialspace=True, delimiter=',')
    csv_list=list(dataset)

    # prediction_dataset=[]
    for row in csv_list:
        if row[11]=='Non-Reopened':
            row[11]=0
        else:
            row[11] = 1
        if row[9]=='Rejected':
            row[9]=0
        else:
            row[9]=1
    prediction_dataset = [row[3], row[4], row[5], row[6], row[7], row[8], row[9], row[10]]
    X = [prediction_dataset]
    y = row[11]
    print(X)
    print(y)
    test_size = 0.2
    random_state = 5
    clf = tree.DecisionTreeClassifier()
    X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=random_state, test_size=test_size)
    # clf = tree.DecisionTreeClassifier()
    clf = clf.fit(X_train, y_train)
    # y_pred = clf.predict(X_test)

    print(accuracy= accuracy_score(y_test,y_pred)*100)


    return render(request, template,{"csv_list": csv_list})

【问题讨论】:

  • 显示错误的完整堆栈跟踪。问题似乎出在X = [prediction_dataset]。你认为这里发生了什么?当你做print(X), print(y)时你会得到什么?
  • 单一数组 array(0) 不能被视为有效集合。这是我得到的错误。很抱歉忘记显示错误的完整堆栈跟踪。
  • @Vivek Kumar,请问有进展吗?
  • @Vivek Kumar,y 是我的数据集预测的目标列,X 是我的数据集剩余列的列表。因此,打印这两个列表只是为了确保它们不为空。
  • prediction_dataset 在 for 循环之外分配。所以将只包含一个条目(来自 for 循环的最后一个)。您使用它来制作 X,所以 X 只有一个样本。您不能在单行上执行 train_test_split

标签: python django scikit-learn


【解决方案1】:

我首先解决了这个问题,import pandas as pd,然后用dataset=pd.read_csv(CSV_file) 替换这行代码dataset=csv.reader(io_string, skipinitialspace=True, delimiter=',')。所以它现在可以工作了。

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 2022-11-10
    • 2013-02-02
    • 2019-05-08
    • 2013-02-03
    • 2022-07-27
    • 2021-03-17
    • 2021-05-26
    相关资源
    最近更新 更多