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
A
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!
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) –
Merci! Je l'essaie maintenant. –