如何将Pandas数据帧加载到意外数据集中?

2024-06-16 17:16:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在根据用户对11个不同项目的评分建立一个推荐系统

我从一本用户评级词典(user_dict)开始:

{'U1': [3, 4, 2, 5, 0, 4, 1, 3, 0, 0, 4], 
 'U2': [2, 3, 1, 0, 3, 0, 2, 0, 0, 3, 0], 
 'U3': [0, 4, 0, 5, 0, 4, 0, 3, 0, 2, 4], 
 'U4': [0, 0, 2, 1, 4, 3, 2, 0, 0, 2, 0], 
 'U5': [0, 0, 0, 5, 0, 4, 0, 3, 0, 0, 4], 
 'U6': [2, 3, 4, 0, 3, 0, 3, 0, 3, 4, 0], 
 'U7': [0, 4, 3, 5, 0, 5, 0, 0, 0, 0, 4], 
 'U8': [4, 3, 0, 3, 4, 2, 2, 0, 2, 3, 2], 
 'U9': [0, 2, 0, 3, 1, 0, 1, 0, 0, 2, 0], 
 'U10': [0, 3, 0, 4, 3, 3, 0, 3, 0, 4, 4],  
 'U11': [2, 2, 1, 2, 1, 0, 2, 0, 1, 0, 2], 
 'U12': [0, 4, 4, 5, 0, 0, 0, 3, 0, 4, 5], 
 'U13': [3, 3, 0, 2, 2, 3, 2, 0, 2, 0, 3], 
 'U14': [0, 3, 4, 5, 0, 5, 0, 0, 0, 4, 0], 
 'U15': [2, 0, 0, 3, 0, 2, 2, 3, 0, 0, 3], 
 'U16': [4, 4, 0, 4, 3, 4, 0, 3, 0, 3, 0], 
 'U17': [0, 2, 0, 3, 1, 0, 2, 0, 1, 0, 3], 
 'U18': [2, 3, 1, 0, 3, 2, 3, 2, 0, 2, 0], 
 'U19': [0, 5, 0, 4, 0, 3, 0, 4, 0, 0, 5], 
 'U20': [0, 0, 3, 0, 3, 0, 4, 0, 2, 0, 0], 
 'U21': [3, 0, 2, 4, 2, 3, 0, 4, 2, 3, 3], 
 'U22': [4, 4, 0, 5, 3, 5, 0, 4, 0, 3, 0], 
 'U23': [3, 0, 0, 0, 3, 0, 2, 0, 0, 4, 0], 
 'U24': [4, 0, 3, 0, 3, 0, 3, 0, 0, 2, 2], 
 'U25': [0, 5, 0, 3, 3, 4, 0, 3, 3, 4, 4]}

然后,我使用以下代码将字典加载到Pandas数据帧中:

df=  pd.DataFrame(user_dict)
userRatings_df = df.T
print(userRatings_df)

这将按如下方式打印数据:

     0  1  2  3  4  5  6  7  8  9  10
U1   3  4  2  5  0  4  1  3  0  0   4
U2   2  3  1  0  3  0  2  0  0  3   0
U3   0  4  0  5  0  4  0  3  0  2   4
U4   0  0  2  1  4  3  2  0  0  2   0
U5   0  0  0  5  0  4  0  3  0  0   4
U6   2  3  4  0  3  0  3  0  3  4   0
U7   0  4  3  5  0  5  0  0  0  0   4
U8   4  3  0  3  4  2  2  0  2  3   2
U9   0  2  0  3  1  0  1  0  0  2   0
U10  0  3  0  4  3  3  0  3  0  4   4
U11  2  2  1  2  1  0  2  0  1  0   2
U12  0  4  4  5  0  0  0  3  0  4   5
U13  3  3  0  2  2  3  2  0  2  0   3
U14  0  3  4  5  0  5  0  0  0  4   0
U15  2  0  0  3  0  2  2  3  0  0   3
U16  4  4  0  4  3  4  0  3  0  3   0
U17  0  2  0  3  1  0  2  0  1  0   3
U18  2  3  1  0  3  2  3  2  0  2   0
U19  0  5  0  4  0  3  0  4  0  0   5
U20  0  0  3  0  3  0  4  0  2  0   0
U21  3  0  2  4  2  3  0  4  2  3   3
U22  4  4  0  5  3  5  0  4  0  3   0
U23  3  0  0  0  3  0  2  0  0  4   0
U24  4  0  3  0  3  0  3  0  0  2   2
U25  0  5  0  3  3  4  0  3  3  4   4

当我尝试加载到意外数据集中时,我运行以下代码:

reader = Reader(rating_scale=(1,5))

userRatings_data=Dataset.load_from_df(userRatings_df[[1,2,3,4,5,6,7,8,9,10]], 
reader)

我得到这个错误:

ValueError: too many values to unpack (expected 3)

有人能帮我纠正这个错误吗


Tags: 数据用户dfdictuseru1u2u6
1条回答
网友
1楼 · 发布于 2024-06-16 17:16:54

问题来自将字典转换为数据帧的方式。要使数据集能够处理数据帧,您只需要有三列。第一列应该是用户ID,第二列是项目ID,第三列是实际评分。 这就是我将如何构建在“数据集”中运行的数据帧:

DF = pd.DataFrame()
for key in user_dict.keys():
    df = pd.DataFrame(columns=['User', 'Item', 'Rating'])
    df['Rating'] = pd.Series(user_dict[key])
    df['Item'] = pd.DataFrame(df.index)
    df['User'] = key

    DF = pd.concat([DF, df], axis = 0)

DF = DF.reset_index(drop=True)

如果你注意的话,我会把字典中的每个键(本质上是一个用户ID)都转换成一个pandas列,以及评级和评级索引,它们将是原始项目ID的列。然后从每个关键点构建一个临时数据帧,该数据帧在最终数据帧和主数据帧中相互堆叠。 希望这能有所帮助

相关问题 更多 >