如何使用Python(pandas)将Excel评分表转换为用户-电影评分矩阵?
pandas实现评分长表转用户-电影协同过滤矩阵
你可以直接用pandas内置的长宽表转换方法实现需求,全程不需要额外依赖,步骤如下:
1. 读取原始Excel数据
首先导入pandas库,读取本地存储的评分长表数据,读取后先做简单校验避免列名、路径错误:
import pandas as pd # 替换为你本地的Excel文件实际路径 raw_rating = pd.read_excel("movie_rating.xlsx") # 校验数据列,确认输出包含 userId、movieId、Rating 三个字段 print(raw_rating.columns)
2. 执行长宽表转换
使用pivot方法完成结构转换,行索引设为用户ID、列设为电影ID、单元格值为对应评分即可:
rating_matrix = raw_rating.pivot( index="userId", columns="movieId", values="Rating" )
转换后的矩阵特性:
- 形状为20行×2234列,行索引对应用户ID、列名对应电影ID,完全匹配协同过滤建模的输入要求
- 用户未打分的电影对应位置自动填充为
NaN,后续建模时可根据算法要求选择填充用户均值、全局均值或保留空值 - 如果需要把缺失值统一替换为0,可在上述代码后追加
.fillna(0),注意该操作可能会影响用户相似度计算的准确性,按需使用
如果你的原始数据存在「同一用户对同一部电影多次评分」的异常记录,pivot会触发报错,替换为pivot_table方法即可兼容,重复评分默认取均值:
rating_matrix = raw_rating.pivot_table( index="userId", columns="movieId", values="Rating", aggfunc="mean" )
3. 结果校验
转换完成后可通过简单代码确认结构符合预期:
# 输出矩阵行列数,预期结果为(20, 2234) print(rating_matrix.shape) # 查看矩阵前几行样例,核对评分值和原始数据是否一致 print(rating_matrix.head())
内容的提问来源于stack exchange,提问作者Hossein
相关产品推荐
相关产品推荐

