python - 索引超出迭代范围

标签 python pandas numpy indexing

我有一个像这样的数据框:

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/

相关文章:

python - 如何检查pandas中两个日期时间之间的日期时间

python - numpy 数组的列表索引中的多个切片

python - 如何在 Mac OSX 10.9 上为 python 3.3.5 安装 NumPy

python - 填充 NaN 值

python - 比较 Pandas 中两个数据帧的列差异

python - numpy dtype int 类型错误

python - 如何加入数据框?

python - 告诉 pandas DataFrame 中缺失行的最佳方法是什么?

python - 从 Random.choices 函数获取唯一项目的列表

python - tensorflow :如何创建一个与占位符形状相同的常量张量