使用pandas导入CSV文件时Notebook内核崩溃如何解决?
pandas 导入CSV触发Notebook内核死亡的排查修复方案
排查顺序(按问题出现概率从高到低排序)
- 内存溢出(占此类问题80%以上)
触发逻辑:pandas默认将全量CSV加载到内存,当文件解析后占用的内存超过系统给内核分配的阈值时,系统会直接触发OOM机制终止内核进程,表现为无前置报错直接弹出kernel died提示。
排查方式:- 终端执行
ls -lh 目标文件路径.csv查看CSV原始大小,注意CSV文本压缩率极高,1G大小的CSV文件解析为DataFrame后通常会占用2-3G内存 - 打开系统任务管理器/活动监视器,执行读文件操作时观察对应Python进程的内存涨幅,如果内存涨到可用上限后进程直接消失,即可判定为OOM问题。
修复方案:
- 不需要全量字段时,读入时指定
usecols参数仅加载必要列:import pandas as pd df = pd.read_csv("target.csv", usecols=["需要的列1", "需要的列2"]) - 指定字段类型降低内存占用,比如枚举类字符串列设为category类型,布尔值/小整数列设为int8类型:
df = pd.read_csv("target.csv", dtype={"类别列": "category", "标记列": "int8"}) - 单文件超过10G的场景,直接用
chunksize参数分块迭代处理,或换用支持核外计算的dask类库。
- 终端执行
- 依赖库损坏/版本不兼容
触发逻辑:pandas、numpy的C扩展部分安装损坏、架构不匹配(比如M系列Mac装了x86版本的依赖)、多源安装导致版本冲突时,执行底层C代码会触发段错误直接杀死进程。
排查方式:退出Notebook,打开对应虚拟环境的原生终端,直接执行读文件代码,如果终端报Segmentation fault后直接退出,即可确认是依赖问题。
修复方案:不要混用pip和conda安装这两个库,执行强制重装:# pip环境执行 pip uninstall -y pandas numpy pip install --force-reinstall pandas numpy# conda环境执行 conda remove -y pandas numpy conda install pandas numpy - CSV文件异常触发C解析器崩溃
触发逻辑:pandas默认使用C实现的解析器提速,当文件存在截断、非法编码、异常转义字符、损坏行时,极端情况会触发解析器段错误。
排查方式:读文件时指定用纯Python引擎测试,如果能正常抛出明确的解析错误而非直接内核崩溃,就属于这类问题:
修复方案:df = pd.read_csv("target.csv", engine="python")- 先指定正确的文件编码,中文场景常见编码为
utf-8-sig、gbk - 加入
on_bad_lines="skip"参数自动跳过损坏的异常行 - 小文件可直接用文本编辑器打开,检查是否存在末尾截断、乱码行,修复后再读取
- 先指定正确的文件编码,中文场景常见编码为
- Notebook内核本身故障
触发逻辑:ipykernel版本和Jupyter版本不兼容,或者之前运行的代码残留了大量未释放的内存占用,也会触发内核崩溃。
排查方式:重启内核并清空所有变量,第一行就执行读CSV代码,如果故障复现则排除残留变量问题。
修复方案:重装ipykernel后重新注册对应环境的内核:pip install --force-reinstall ipykernel python -m ipykernel install --user --name=对应环境名称
内容的提问来源于stack exchange,提问作者Olawale Aileru
相关产品推荐
相关产品推荐

