【问题标题】:How can I figure out why my Jupyter kernel is dying?我怎样才能弄清楚为什么我的 Jupyter 内核会死掉?
【发布时间】:2020-11-17 23:50:54
【问题描述】:

我在 Jupyter Notebook 中编写了一个脚本,用于从 Excel 文件中读取模型规格(应该预测什么、从什么变量、使用什么过滤器逻辑),使用 xgboost 运行一系列模型,并将结果写入Excel。使用几个不同的数据集,它工作得很好,但是对于一个特定的数据集,每次我尝试运行它时,我都会收到消息:

The kernel appears to have died. It will restart automatically.

我尝试在 Spyder 中运行相同的脚本,但收到了以下消息:

Assertion failed! 
File: pyreadstat/_readstat_parser.c, Line 12686 Expression: 
!PyErr_Occurred()

pyreadstat 是我用来从 SPSS 数据文件中读取变量标签的模块,所以这让我相信使用 pyreadstat 可能存在问题。

回到 Jupyter Notebook 中的原始脚本,我注释掉了与 pyreadstat 相关的任何内容,但我仍然收到内核死亡消息。但是,我仍然可以运行我的脚本,而不会出现其他数据文件和模型规范的问题——无论是否注释掉 pyreadstat。

这段代码适用于大约 5 种不同的配置但不是这 1 种的事实让我认为这个文件有些不同,但我不确定如何识别它是什么,特别是因为 Spyder 警告让我认为它是 pyreadstat,但删除 pyreadstat 会导致问题在 Jupyter 和 Spyder 中继续存在(在 Spyder 中,一旦我注释掉 pyreadstat,它就会卡住连接到内核)。

编辑:我还尝试添加一些打印语句以查看内核死在哪里,但它在任何运行之前就死了——我正在调用的函数开头的打印语句甚至没有执行。

编辑:我刚刚发现问题与 pandas.read_spss 有关。我在我的函数中单独运行每个语句,而这一行是内核死亡的那一行:

df = pd.read_spss("C:/Users/me/Desktop/file.sav", convert_categoricals=False)

查看 SPSS 文件本身,其中一个变量是日期。我的其他数据文件中的变量都不是日期,所以我将它的格式更改为字符串,当我这样做时,我得到了一个错误,而不是内核死亡。有趣的是,看起来 pandas.read_spss 使用了 pyreadstat:

ReadstatError                             Traceback (most recent call last)
<ipython-input-3-e8f001d12898> in <module>
      1 import pandas as pd
      2 
----> 3 df = pd.read_spss(fileloc, convert_categoricals=False)

~\Anaconda3\lib\site-packages\pandas\io\spss.py in read_spss(path, usecols, convert_categoricals)
     41 
     42     df, _ = pyreadstat.read_sav(
---> 43         path, usecols=usecols, apply_value_formats=convert_categoricals
     44     )
     45     return df

pyreadstat\pyreadstat.pyx in pyreadstat.pyreadstat.read_sav()

pyreadstat\_readstat_parser.pyx in pyreadstat._readstat_parser.run_conversion()

pyreadstat\_readstat_parser.pyx in pyreadstat._readstat_parser.run_readstat_parser()

pyreadstat\_readstat_parser.pyx in pyreadstat._readstat_parser.check_exit_status()

ReadstatError: Unable to open file

但现在我有点不知所措,因为由于日期是一个字符串,所以我找不到这个文件与其他 SPSS 文件有什么不同。

【问题讨论】:

  • 介意分享文件吗?我唯一的猜测是,可能有不同的大小和/或数据不应该是。
  • 我希望我可以,但它们是用于工作的,因此无法与外部共享。导致内核死机的文件比我一直使用的文件小得多。

标签: python pandas jupyter-notebook kernel spss


【解决方案1】:

我找到了答案,而且还很模糊!

此 SPSS 文件中有一个包含 290 个值标签的变量。如果我在将 SPSS 文件中的该变量引入 Python 之前将其删除,那么一切都会按预期运行。

我的问题编辑中提到的日期格式变量根本不是问题,一旦我删除带有大量值标签的变量,导入就很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-19
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多