5

我正在参加 Walmart Kaggle 比赛,我正在尝试创建一个“FinelineNumber”列的虚拟列。对于上下文,df.shape返回(647054, 7). 我正在尝试为df['FinelineNumber']具有 5,196 个唯一值的虚拟列。结果应该是 shape 的数据框(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 notebook 中运行 python 2.7。

有人可以解释为什么会发生这种情况(以及为什么大部分时间都会发生但不是每次都发生)?是 jupyter notebook 还是 pandas bug?此外,我认为这可能与 RAM 不足有关,但我在具有 >100 GB RAM 的 Microsoft Azure 机器学习笔记本上遇到了同样的错误。在 Azure ML 上,内核每次都死掉 - 几乎是立即死掉。

4

1 回答 1

8

这很可能是内存使用 - 一个 647054、5196 数据帧有 3,362,092,584 个元素,仅用于 64 位系统上对象的指针就有 24GB。在 AzureML 上,虽然 VM 有大量内存,但实际上可用内存量受到限制(目前为 2GB,很快将达到 4GB)——当达到限制时,内核通常会死掉。因此,这似乎很可能是内存使用问题。

在进行任何其他操作之前,您可以先尝试对数据框执行.to_sparse() 。这应该允许 Pandas 将大部分数据帧保留在内存之外。

于 2015-12-10T17:25:00.887 回答