i使用 pd.pivot_table((方法来创建用户信息矩阵,通过旋转用户项目活动数据来创建用户信息矩阵。但是,数据框是如此之大,以至于我这样抱怨:
未堆放的数据框太大,导致 int32溢出
关于解决此问题的任何建议?谢谢!
r_matrix = df.pivot_table(values='rating', index='userId', columns='movieId')
一些解决方案:
- 您可以将熊猫版本降级到0.21,这对于具有大尺寸数据的枢轴表不问题。
- 您可以将数据设置为字典格式,例如
df.groupby('EVENT_ID')['DIAGNOSIS'].apply(list).to_dict()
您可以改用groupby
。尝试此代码:
reviews.groupby(['userId','movieId'])['rating'].max().unstack()
库中的整数溢出您无能为力。您基本上有三个选项:
- 更改输入数据您提供给库,以免发生溢出。从某种意义上说,您可能需要使输入较小。如果没有帮助,您可能会以错误的方式使用图书馆或击中库中的错误。
- 使用不同的库(或根本没有(;看来您使用的库不是打算在大输入上运行的。
- 修改库的代码本身,以便它可以处理您的输入。这可能很难做到,但是如果您向图书馆源代码提交拉动请求,许多人会从中获利。
您不提供太多代码,所以我无法说出最适合您的解决方案。
如果您想要 Movieid 作为列,请首先使用Movieid作为键进行排序数据框。
然后将(一半(数据框架分开,以便每个子集包含特定电影的所有评分。
subset1 = df[:n]
subset2 = df[n:]
现在,应用于每个子集
matrix1 = subset1.pivot_table(values='rating', index='userId', columns='movieId')
matrix2 = subset2.pivot_table(values='rating', index='userId', columns='movieId')
最终使用Matrix1和Matrix2使用
complete_matrix = matrix1.join(matrix2)
另一方面,如果您想要用户ID 作为列,请使用用户ID作为密钥对数据框进行排序,然后重复上述过程。
***请务必删除子集群,subset2,matrix1&完成后Matrix2或最终会出现内存错误。
转换值列应该解决您的问题:
df ['ratings'] = df ['评级']。astype('int64’(