首页 > 解决方案 > TypeError:列表索引必须是整数或切片,而不是电影评分数据的元组

问题描述

我尝试查看有关如何解决此问题的其他文章,但由于某种原因我没有得到任何结果。我收到错误“TypeError:列表索引必须是整数或切片,而不是元组”,并想看看是否有人可以在我的代码中指出原因。

提前致谢!

nb_users = int(max(max(training_set[:,0]), max(test_set[:,0])))
nb_movies = int(max(max(training_set[:,1]), max(test_set[:,1])))

def convert(data):
    new_data = [] expects that. 1 list per user
    for id_users in range(1, nb_users + 1):
        id_movies = data[:,1][data[:,0] == id_users]
        id_ratings = data[:,2][data[:,0] == id_users]
        ratings = np.zeros(nb_movies)
        ratings[id_movies - 1] = id_ratings
        new_data.append(list(ratings))
    return new_data

training_set = convert(training_set)
test_set = convert(test_set)


TypeError: Traceback (most recent call last)
<ipython-input-35-d2825f049d11> in <module>()
      3 
      4 #take max user id/movie id for total numbers for test and train set.
----> 5 nb_users = int(max(max(training_set[:,0]), max(test_set[:,0])))
      6 nb_movies = int(max(max(training_set[:,1]), max(test_set[:,1])))
      7 

TypeError: list indices must be integers or slices, not tuple

标签: pythonpython-3.xmachine-learning

解决方案


您似乎将其training_set用作 Pandas 数据框,但它实际上是一个列表。

您应该首先将其转换为数据框;这样做的方式取决于training_set' 元素的结构。例如,如果它们是字典,您可以这样做:

training_set_df = pandas.DataFrame(training_set)

然后使用training_set_df代替training_set.


推荐阅读