2017-01-26 6 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

Почему вы не конвертируете значения в строку? Несмотря на то, что это целое число, компьютер может воспринимать его как научное значение и, таким образом, становится плавающей стоимостью.

Попробуйте это:

Преобразование cust_id и ITEM_NUMBER в символы из значения с плавающей точкой:

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

mergedfinal мой dataframe

Смежные вопросы