You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 01:32:43