我正在参加Walmart Kaggle比赛,我正试图在#34; FinelineNumber"中创建一个虚拟列。柱。对于上下文,df.shape
返回(647054, 7)
。我正在尝试为df['FinelineNumber']
创建一个虚拟列,它有5,196个唯一值。结果应该是形状(647054, 5196)
的数据框,然后我计划concat
到原始数据框。
几乎每次我运行fineline_dummies = pd.get_dummies(df['FinelineNumber'], prefix='fl')
时,都会收到以下错误消息The kernel appears to have died. It will restart automatically.
我在带有16GB RAM的MacBookPro上运行jupyter笔记本中的python 2.7。
有人可以解释为什么会发生这种情况(以及为什么它会在大多数情况下发生但不是每次都发生)?它是一个jupyter笔记本或熊猫bug?此外,我认为这可能与RAM不足有关,但我在带有> 100 GB RAM的Microsoft Azure机器学习笔记本上遇到了同样的错误。在Azure ML上,内核每次都会死掉 - 几乎立刻就会死掉。
答案 0 :(得分:7)
非常可能是内存使用 - 647054,5196数据帧有3,362,092,584个元素,对于64位系统上的对象指针,它只有24GB。在AzureML上,当VM拥有大量内存时,实际上你可以使用的内存数量有限(目前是2GB,很快就是4GB) - 当你达到极限时,内核通常会死掉。所以它似乎很可能是内存使用问题。
在进行任何其他操作之前,您可以先尝试对数据框执行.to_sparse()。这应该允许Pandas将大部分数据帧保留在内存之外。