2017-01-26 7 views
0

나는 추천 시스템에서 일하고있다. 나는 this을 따라 항목 매트릭스별로 사용자를 만들었습니다. 그러나 오류가 발생했습니다. IndexError: index 8928358160 is out of bounds for axis 0 with size 5사용자가 martrix pandas

다음은 데이터 집합의 예입니다.

import pandas as pd 
import numpy as np 

df = pd.read_csv('APRIL.csv') 
df = df.drop(['BASKETID'],1) 
df = df.head(10) 
df 
Out[89]: 
MEMBERID SKU QTY 
0 8928358161 37101163 2 
1 8928358161 36618858 1 
2 8928358161 40855129 1 
3 8933444371 35010078 1 
4 8932505053 36335949 1 
5 8932505053 92100668 1 
6 8932505053 36529730 2 
7 8921161362 61814893 1 
8 8915688100 34732853 1 
9 8915688100 35122457 1 


n_users = df.MEMBERID.unique().shape[0] 
n_items = df.SKU.unique().shape[0] 
print str(n_users) + ' users' 
print str(n_items) + ' items' 
5 users 
10 items 

ratings = np.zeros((n_users, n_items)) 
for row in df.itertuples(): 
    ratings[row[1]-1, row[2]-1] = row[3] 
ratings 
--------------------------------------------------------------------------- 
IndexError        Traceback (most recent call last) 
<ipython-input-92-0a393963bf4c> in <module>() 
     1 ratings = np.zeros((n_users, n_items)) 
     2 for row in df.itertuples(): 
----> 3  ratings[row[1]-1, row[2]-1] = row[3] 
     4 ratings 

IndexError: index 8928358160 is out of bounds for axis 0 with size 5 

나는 아직도 index 8928358160에서 이해가되지 않았다.

답변

0

왜 값을 문자열로 변환하지 않습니까? 정수이지만 컴퓨터가이를 과학적 값으로 받아 부동 값이 될 수도 있습니다. ITEM_NUMBER는 float 값의 문자에 CUST_ID 변환

과 :

mergedfinal['cust_id'] = mergedfinal['cust_id'].astype(str) 
mergedfinal['item_number'] = mergedfinal['item_number'].astype(str) 
mergedfinal['SKU'] = mergedfinal['SKU'].astype(str) 

mergedfinal 내 dataframe

입니다

이 시도