首页 > 解决方案 > randrange() 的空范围 (1,1,0)

问题描述

我正在尝试使用 while 循环将列表拆分为训练数据和测试数据,但在运行一两次迭代后立即弹出 randrange() 错误。无法理解出了什么问题。摄取的 csv 文件有 767 行数据。下面是代码:

dataset = list(csv.reader(open("Data\diabetes.csv", 'r'), delimiter = ","))

trainSet = []
trainSize = int(0.67* len(dataset))
while len(trainSet) < trainSize:
      x = len(dataset)
      index = random.randint(1, x-1)
      trainSet.append(dataset[index])
      dataset = dataset.pop(index)

以下是错误:

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
  File "C:\Users\Vikash Patel\AppData\Local\Programs\Python\Python38\lib\random.py", line 248, in randint
   return self.randrange(a, b+1)
  File "C:\Users\Vikash Patel\AppData\Local\Programs\Python\Python38\lib\random.py", line 226, in randrange
   raise ValueError("empty range for randrange() (%d, %d, %d)" % (istart, istop, width))

ValueError:randrange() 的空范围 (1, 1, 0)

标签: pythondataframe

解决方案


ValueError: empty range for randrange() (1, 1, 0)当您尝试调用时发生random.randint(1, 0)

发生这种情况是因为当您想要弹出项目的数据集时,该行将dataset = dataset.pop(index)您的数据集设置为等于弹出的项目(长度为 1)。然后,当您的循环下一次迭代时,x = len(dataset)设置 x = 1,并且该行index = random.randint(1, x-1)调用random.randint(1, 0).

试试这个:

import random

dataset = [10,11,12,13,14,15]

trainSet = []
trainSize = int(0.67* len(dataset))
while len(trainSet) < trainSize:
    x = len(dataset)
    index = random.randint(1, x-1)
    trainSet.append(dataset[index])

    # this changes the size of the dataset
    dataset.pop(index)

输出:

> trainSet
[13, 12, 15, 14]

推荐阅读