【问题标题】:single positional indexer is out-of-bounds单个位置索引器超出范围
【发布时间】:2019-04-13 09:15:40
【问题描述】:
with open('similarities/EuclideanSimilarity.csv', 'w') as result_file:

print('user1,user2,similarity', file=result_file)

print('Calculating similarities between users...')

for u1 in tqdm(users, total=len(users)):

for u2 in users:

ratings1 = np.nan_to_num(np.array(user_ratings_matrix.iloc[u1 - 1].values))

ratings2 = np.nan_to_num(np.array(user_ratings_matrix.iloc[u2 - 1].values))

              sim = 1 / (1 + distance.euclidean(ratings1, ratings2))
                print(f"{u1},{u2},{sim}", file=result_file)"

~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in getitem(self, key) 1371 第1372章 -> 1373 返回 self._getitem_axis(maybe_callable,axis=axis) 1374 第1375章

~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _getitem_axis(self, key, axis) 1828 第1829章 -> 1830 self._is_valid_integer(键,轴) 1831 1832返回self._get_loc(键,轴=轴)

~/anaconda3/lib/python3.6/site-packages/pandas/core/indexing.py in _is_valid_integer(self, key, axis) 第1711章 1712 如果键 >= l 或键 1713 raise IndexError("单个位置索引器超出范围") 1714 返回真 第1715章

IndexError: 单个位置索引器超出范围

【问题讨论】:

  • 你让我们猜测错误是什么以及它发生在哪里。请编辑问题以包含完整的错误跟踪消息。
  • 我不太了解 pandas 或 numpy,但我猜[u1 - 1] 超出了user_ratings_matrix.iloc 的范围。
  • 是的,我发现错误是因为我在数据集中有 2113 个用户,但 userId 是随机编号的,而不是 1,2,3,4 .....,2113。它是 75,78, ...,8567。那么我该如何解决这个问题

标签: python pandas numpy


【解决方案1】:

您没有提供有关usersuser_ratings_matrix 的类型/内容的足够信息,无法可靠地回答您的问题。如果我假设users 是一个用户ID 列表,而user_ratings_matrix 是标准Pandas DataFrame users 的顺序相同,那么你可以重写你的@987654328 @ 循环如下:

for u1,row1 in tqdm(zip(users, user_ratings_matrix.itertuples(index=False, name=None)), total=len(users)):
    for u2,row2 in zip(users, user_ratings_matrix.itertuples(index=False, name=None)):
        ratings1 = np.nan_to_num(np.array(row1))
        ratings2 = np.nan_to_num(np.array(row2))
        sim = 1 / (1 + distance.euclidean(ratings1, ratings2))
        print(f"{u1},{u2},{sim}", file=result_file)"

说明

user_ratings_matrix.itertuples(index=False, name=None) 将遍历数据框中的行并将每个行作为元组返回。

zip(users, user_ratings_matrix.itertuples(index=False, name=None)) 将遍历 (userID, tuple(dataframe_row)) 对。

另外,在您下次在 SO 上发布问题之前,您可能应该阅读these guidelines about how to produce an example that other people can run/work with。它将帮助您在此网站上获得更好的答案。

【讨论】:

    猜你喜欢
    • 2018-03-03
    • 2022-07-06
    • 1970-01-01
    • 2020-12-24
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多