我有一个像这样的数据框:
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个用户,并且有〜6000items
我有2个问题。 如果我想建立这样的训练数据集:
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`
我在第[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行传递代码:代码仅返回np.zeros矩阵
答案 0 :(得分:1)
row[1]
代表user_id
,而不是您的数据框索引。一旦到达user_id
大于第一维度ratings
的行,您将看到IndexError
。而是使用row[0]
或row.Index
提取行索引,然后可以使用该索引为ratings
数组建立索引。
此外,请注意,df[df["user_id"] < 2000]
本身并不能保证您拥有1999个用户。例如,某些user_id
整数标识符可能会丢失。