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在 getitem 中(自身,密钥) 1371 1372 = -> 1373返回self._getitem_axis(maybe_callable,axis = axis) 1374 1375 def _is_scalar_access(self,key):
_getitem_axis中的〜/ anaconda3 / lib / python3.6 / site-packages / pandas / core / indexing.py(自身,键,轴) 1828 1829#验证位置 -> 1830 self._is_valid_integer(键,轴) 1831年 1832返回self._get_loc(键,轴=轴)
_is_valid_integer中的〜/ anaconda3 / lib / python3.6 / site-packages / pandas / core / indexing.py(自身,键,轴) 1711 l = len(ax) 1712如果键> = l或键<-l: -> 1713提高IndexError(“单个位置索引器超出范围”) 1714返回True 1715
IndexError:单个位置索引器超出范围
答案 0 :(得分:0)
对于users
或user_ratings_matrix
的类型/内容,您提供的信息不足,无法可靠地回答您的问题。如果我假设users
是用户ID列表,而user_ratings_matrix
是标准熊猫DataFrame
,其顺序与users
,则可以这样重写for
循环:
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。它可以帮助您在此网站上获得更好的答案。