单个位置索引器超出范围

时间:2018-11-09 19:05:22

标签: python pandas numpy

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:单个位置索引器超出范围

1 个答案:

答案 0 :(得分:0)

对于usersuser_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。它可以帮助您在此网站上获得更好的答案。