2017-10-14 4 views
0
import numpy as np 
import pandas 

data=pandas.read_table('u.data',names=['user id','item id','rating','timestamp'] 

user=pandas.read_table('u.user', sep='|',names=['user id ','age','gender','occupation','zip code']) 

item=pandas.read_table(r'u.item', sep='|',names=['movie id','movie title','release date','video release date', 
'IMDb URL','unknown','Action','Adventure','Animation',"Children's", 
'Comedy','Crime','Documentary','Drama','Fantasy','Film-Noir', 
'Horror','Musical','Mystery','Romance','Sci-Fi','Thriller',' War',' Western']) 

data.sort_values('user id', inplace=True) 

Averge=pandas.pivot_table(data, values='rating', columns=['user id'], aggfunc='mean') 

M=[] 
F=[] 

#There is an error 

for i in range(944): 
    if user.iloc[i]['gender']=='M': 
     M.append(Averge[i+1]) 
    else: 
     F.append(Averge[i+1]) 

IndexError: single positional indexer is out-of-bounds 
+0

Il semble que vous ayez des questions sur tout le code. Vous devrez fournir un contexte à votre question, et formater tous vos blocs de code (sélectionnez-les, puis appuyez sur ) –

+0

Merci! Je l'essaie maintenant. –

Répondre

0

Vous essayez d'ajouter un sous-ensemble de la trame de données Averge, mais vous n'êtes pas indexer correctement la trame de données. Si vous voulez la ligne i+1 de Averge, utilisez .iloc.

Par exemple:

import pandas as pd 

df = pd.DataFrame({'foo':[1,2,3], 'bar':[9,8,7]}) 
for i in range(2): 
    print(df.iloc[i+1]) 

# output 
bar 8 
foo 2 
Name: 1, dtype: int64 
bar 7 
foo 3 
Name: 2, dtype: int64 
0

Je suis désolé, mon anglais est pauvre. J'espère que vous allez savoir ce que je veux exprimer.

Nous vous remercions de l'indice d'andrew_reece! Maintenant, je l'ai résolu! Tout d'abord, pour i dans la gamme (943): 944 au-delà de la limite, vous devez mieux connaître les données. Ensuite, parce que mes données sont spéciales, Averge.iloc [0] [i + 1] a raison. Une seule rangée. juste comme ça!

Averge=pandas.pivot_table(data, values='rating', columns=['user id'], aggfunc='mean') 

M=[] 
F=[] 

for i in range(943): 
    #944 will make it-> IndexError: single positional indexer is out-of-bounds 
    if (user.iloc[i]['gender']=='M'): 
     M.append(Averge.iloc[0][i+1]) 
    else: 
     F.append(Averge.iloc[0][i+1]) #df.iloc[0][1] the first data 

Si tout le monde a quelque chose qui cloche, bienvenue!