我有一个像这样的数据框:
user_id anime_id user_rating
0 1 20 7.808497
1 3 20 8.000000
2 5 20 6.000000
3 6 20 7.808497
4 10 20 7.808497
它看起来像是使用推荐系统的基本数据框。
我有大约 700 万行,我减少了一点数据帧:
df = df[df["user_id"] < 2000]
让我们打印 n_users、n_items,当然我有 1999 个用户,还有 ~6000 个项目
我有两个问题。 如果我想像这样构建我的训练数据集:
ratings = np.zeros((n_users, n_items))
for row in df.itertuples():
ratings[row[1]-1, row[2]-1] = row[3]
我有一个`IndexError:
index 950 is out of bounds for axis 0 with size 949`
我在评论后尝试了 row[0] 的新功能,但它不起作用:
X = urm[["user_id", "anime_id"]].as_matrix()
y = urm["user_rating"].values
n_u = len(urm["user_id"].unique())
n_m = len(urm["anime_id"].unique())
R = np.zeros((n_u, n_m))
for idx, row in enumerate(X):
R[row[0]-1, row[1]-1] = y[idx]
仍然是相同的 IndexError。
如果我在 R.index 中传递带有 if row 的行:代码仅返回 np.zeros 矩阵
最佳答案
row[1]
代表user_id
,而不是您的数据帧索引。一旦您到达 user_id
的行大于 ratings
的第一个维度,您将看到 IndexError
。相反,使用 row[0]
或row.Index
提取行索引,然后您可以使用它来索引 ratings
数组。
此外,请注意 df[df["user_id"] < 2000]
其本身并不能保证您拥有 1999 个用户。例如一些user_id
整数标识符可能丢失。
关于python - 索引超出迭代范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51139788/