使用 pandas 创建虚拟变量时,Jupyter notebook 内核死机

Jupyter notebook kernel dies when creating dummy variables with pandas

我正在参加 Walmart Kaggle 竞赛,我正在尝试创建 "FinelineNumber" 列的虚拟列。对于上下文,df.shape returns (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. 我正在 运行ning python 2.7 in jupyter notebook on a配备 16GB RAM 的 MacBookPro。

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

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

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