我怎样才能弄清楚为什么我的 Jupyter 内核快死了?
How can I figure out why my Jupyter kernel is dying?
我在 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 文件本身,变量之一是日期。 None 我其他数据文件中的变量是日期,所以我将其格式更改为字符串,当我这样做时,内核没有死掉,而是出现了错误。有趣的是,看起来 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 文件的任何不同之处,因为日期是一个字符串。
我找到了答案,而且很晦涩!
此 SPSS 文件中有一个带有 290 个值标签的变量。如果我在将它引入 Python 之前删除 SPSS 文件中的那个变量,一切都会按预期运行。
我的问题编辑中提到的日期格式变量根本不是问题,一旦我删除带有很多值标签的变量,导入就可以正常导入。
我在 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 文件本身,变量之一是日期。 None 我其他数据文件中的变量是日期,所以我将其格式更改为字符串,当我这样做时,内核没有死掉,而是出现了错误。有趣的是,看起来 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 文件的任何不同之处,因为日期是一个字符串。
我找到了答案,而且很晦涩!
此 SPSS 文件中有一个带有 290 个值标签的变量。如果我在将它引入 Python 之前删除 SPSS 文件中的那个变量,一切都会按预期运行。
我的问题编辑中提到的日期格式变量根本不是问题,一旦我删除带有很多值标签的变量,导入就可以正常导入。