인프런 커뮤니티 질문&답변

이푸름님의 프로필 이미지
이푸름

작성한 질문수

Python을 이용한 개인화 추천시스템 | 추천알고리즘 | 추천인공지능

사용자 집단별 추천

사용자 집단별 추천 강의 11:56 부분에 성별에 따른 예측값 계산에서 MergeError가 발생합니다.

해결된 질문

작성

·

340

0

 

# 성별에 따른 예측값 계산
merged_ratings = pd.merge(x_train,users)

users = users.set_index('user_id')

g_mean = merged_ratings[['movie_id','sex','rating']].groupby(['movie_id', 'sex'])['rating'].mean()
g_mean


코드는 이렇게 작성했고요.

merged_ratings = pd.merge(x_train,users)
이 부분에서

MergeError: No common columns to perform merge on. Merge options: left_on=None, right_on=None, left_index=False, right_index=False

이런 에러가 발생해요. 강의랑 똑같이 했는데 왜 에러가 나는걸까요? ㅠ ㅠ

답변 1

0

거친코딩님의 프로필 이미지
거친코딩
지식공유자

안녕하세요.

거친코딩입니다 🙂

간단히 에러를 살펴보면 머지 하실때 공통 컬럼이 없다고 뜨는데, x_train과 users를 프린트문으로 찍어보시고 컬럼명이 일치하시는지 확인 부탁드립니다.

혹은 머지 하시려는 키가 인덱스로 잡혀있을수 있으니 해당부분도 참고부탁드립니다.

감사합니다.

거친코딩 드림

이푸름님의 프로필 이미지
이푸름
질문자

답변 감사합니다!

연속으로 실행시키면 나는 오류였습니다.
한번 실행 시킨뒤엔 users = users.set_index('user_id') 이 코드로 users가 달라져서 아래 코드를 실행한 뒤 다시 실행시키니 잘 동작합니다. 감사합니다!

# 데이터 읽어오기(user, item, data)
base_src = 'drive/MyDrive/RecoSys/Data'
u_user_src = os.path.join(base_src, 'u.user')
u_cols = ['user_id', 'age', 'sex', 'occupation', 'zip_code']
users = pd.read_csv(u_user_src,
                    sep='|',
                    names=u_cols,
                    encoding='latin-1')

u_item_src = os.path.join(base_src, 'u.item')
i_cols = ['movie_id','title','release date','video release date',
          'IMDB URL','unknown','Action','Adventure','Animat ion', 'Children\'s','Comedy','Crime','Documentary ','Drama','Fantasy',
          'Film- Noir','Horror','Musical','Mystery','Romance ','Sci-Fi','Thriller','War','Western']
movies = pd.read_csv(u_item_src,
                     sep='|',
                     names=i_cols,
                     encoding='latin-1')

u_data_src = os.path.join(base_src, 'u.data')
r_cols = ['user_id', 'movie_id', 'rating', 'timestamp']
ratings = pd.read_csv(u_data_src,
                      sep = '\t',
                      names = r_cols,
                      encoding = 'latin-1')

# ratings DataFrame에서 timestamp 제거
ratings = ratings.drop('timestamp', axis=1)
movies = movies[['movie_id', 'title']]

 

이푸름님의 프로필 이미지
이푸름

작성한 질문수

질문하기