请求修复AttributeError:'Series'对象无'movie_id'属性
电影推荐系统错误修复方案
错误根源
AttributeError: 'Series' object has no attribute 'movie_id' 本质是你在代码中尝试用属性访问(.movie_id)获取电影ID,但你的DataFrame里没有名为movie_id的列,或者列名存在拼写差异(比如实际是id)。
修复步骤
1. 确认DataFrame的列名
先在加载数据后添加打印列名的代码,明确实际的ID列名称:
movies_dict = pickle.load(open('movie_dict.pkl','rb')) movies = pd.DataFrame(movies_dict) # 打印所有列名,确认ID字段的真实名称 print(movies.columns.tolist())
运行后控制台会输出所有列,比如如果输出包含id而非movie_id,就需要对应修改后续代码。
2. 修改推荐函数中的ID访问逻辑
根据实际列名,将属性访问改为方括号索引(更稳妥,避免属性名拼写问题):
- 如果实际列名是
id:
movie_id = movies.iloc[i[0]]['id']
- 如果实际列名确实是
movie_id,也建议改用方括号访问(避免Series属性访问的潜在问题):
movie_id = movies.iloc[i[0]]['movie_id']
完整修复后的recommend函数示例
假设ID列名为id,修改后的函数如下:
def recommend(movie): movie_index = movies[movies['title'] == movie].index[0] distances = similarity[movie_index] movies_list = sorted(list(enumerate(distances)), reverse=True, key=lambda x: x[1])[1:11] recommended_movies = [] recommended_movies_posters = [] for i in movies_list: movie_id = movies.iloc[i[0]]['id'] recommended_movies.append(movies.iloc[i[0]]['title']) recommended_movies_posters.append(fetch_poster(movie_id)) return recommended_movies, recommended_movies_posters
额外优化建议
为避免海报获取失败导致报错,给fetch_poster函数添加空值判断:
def fetch_poster(movie_id): response = requests.get('https://api.themoviedb.org/3/movie/{}?api_key=8d34d783dcc752ddfc5ef8a4e017f1f4&language=en-US'.format(movie_id)) data = response.json() poster_path = data.get('poster_path') return "https://image.tmdb.org/t/p/w500" + poster_path if poster_path else "https://via.placeholder.com/500x750?text=No+Poster"
内容的提问来源于stack exchange,提问作者Jinia
相关产品推荐
相关产品推荐

