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

모든 코드가 궁금한 것 같습니다. 질문에 컨텍스트를 제공하고 코드 블록을 모두 포맷해야합니다 (선택 후 를 누르십시오). –

+0

감사합니다! 나는 지금 그것을 시험해 본다. –

답변

0

입니다. i+1 행이 Averge 인 경우 .iloc을 사용하십시오. 예를 들어

:

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

정말 미안 해요, 내 영어가 좋지 않습니다. 내가 표현하고자하는 것을 kown에 바란다.

andrew_reece의 힌트에 진심으로 감사드립니다! 이제 해결했습니다!

처음에는 범위를 벗어난 범위 ​​(943) : 944에 대해 데이터를 더 잘 알아야했습니다. 내 데이터가 특별하기 때문에 Averge.iloc [0] [i + 1]이 옳습니다. 한 행만. 그냥 좋아해요!

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 

모두에게 이상이 있으면 환영합니다!