我正在尝试透视此 Dataframe (“refine_dataset”):
就像这样:
movieUser_df = refined_dataset.pivot(
index='userID',
columns='primaryTitle',
## Replacing all movies users haven't rated with a rating of 0
values='rating').fillna(0)
它返回错误:IndexError: index 875914235 is out of bounds for axis 0 with size 875909652
我已经用几乎相同的方法在过去的数据集(但小得多),我查找了为什么我可能会有这个问题,并在5年前遇到了this帖子,其中解释说这是一个正在进行的Pandas问题。除了对该帖子的几条评论,其中最近的一条是两年前的,我不知道是否有任何更新,我找不到其他人谈论这个问题或可能的解决方案。有人知道Pandas问题是否真的是我的问题吗?是否是,是否有任何方法我可以尝试和做不同的?
1条答案
按热度按时间ecbunoof1#
主要的问题是,如果你使用传统的pandas方法来创建一个包含太多行和列的pivot表,即使大多数值都使用了缺失
row, column
对的填充默认值(在你的例子中,所有用户没有评级的电影的评级为0),值的总数也会导致整数溢出,并且超过可用内存。解决方案是使用sparse data structures。This SO question有一个答案,它介绍了如何使用来自
scipy.sparse
的csr_matrix
和来自pandas.api.types
的CategoricalDtype
来实现这一点,但它依赖于近年来从pandas中删除的pd.SparseDataFrame
。下面的代码应该能够处理您的问题中的示例。
生成示例输入的代码:
以下是我所做的假设:
df
,旋转输出命名为dfOut
userID, titleID
对)观察结果:
info()
方法报告memory usage: 195.1+ MB
。