bugfix> python > 投稿

この問題を解決する方法に関する他の記事を調べてみましたが、何らかの理由でどこにもアクセスできません。 「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

回答 1 件
  • training_set を使用しているようです  パンダのデータフレームとしてですが、実際にはリストです。

    最初にデータフレームに変換する必要があります。そしてこれを行う方法は training_set の構造に依存します の要素。たとえば、それらが辞書である場合、これを行うことができます:

    training_set_df = pandas.DataFrame(training_set)
    
    

    そして、 training_set_df を使用します   training_set の代わりに 。

あなたの答え