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
답변
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
모두에게 이상이 있으면 환영합니다!
모든 코드가 궁금한 것 같습니다. 질문에 컨텍스트를 제공하고 코드 블록을 모두 포맷해야합니다 (선택 후를 누르십시오). –
감사합니다! 나는 지금 그것을 시험해 본다. –