один позиционный индексатор выходит за пределы - PullRequest
0 голосов
/ 09 ноября 2018
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 (self, key) 1371 1372 Maybe_callable = com._apply_if_callable (ключ, self.obj) -> 1373 вернуть self._getitem_axis (может быть, вызываемый, ось = ось) 1374 1375 def _is_scalar_access (self, key):

~ / anaconda3 / lib / python3.6 / site-packages / pandas / core / indexing.py в _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 в _is_valid_integer (self, key, axis) 1711 л = длина (топор) 1712, если ключ> = l или ключ <-l: -> 1713 повысить IndexError («одиночный позиционный индексатор выходит за пределы») 1714 верни истину 1715

IndexError: одиночный позиционный индексатор вышел за пределы

1 Ответ

0 голосов
/ 10 ноября 2018

Вы не предоставили достаточно информации о типе / содержании users или user_ratings_matrix, чтобы надежно ответить на ваш вопрос. Если я предполагаю, что users - это список идентификаторов пользователей, а 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, вам, вероятно, следует прочитать эти рекомендации о том, как создать пример, с которым другие люди могут работать / работать с . Это поможет вам получить лучшие ответы на этом сайте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...