Jupyter Notebook部分代码执行过慢(含pandas操作)求问题原因与解决方法
Jupyter环境Pandas操作耗时异常升高的诱因与解决方案
常见诱因及对应解决方法
- 数据集规模隐性变化
若近期更新过train.csv文件,可能存在行/列数量增加、冗余空行/乱码写入、编码异常等问题,会同时抬高读取和计算耗时。
解决方案:
读取csv时增加参数减少冗余开销:train = pd.read_csv('Desktop\\train.csv', usecols=['需要用到的列名1','列名2',...], dtype={'列名1':指定类型, '列名2':指定类型}, low_memory=False)
提前校验csv文件大小、行数是否和之前正常运行时的版本一致,排查是否有异常冗余内容。 - Jupyter内核存在内存残留
之前运行的代码若存在内存泄漏,或未释放的大体积变量会占用大量内存,后续操作触发内存交换时会大幅拖慢速度。
解决方案:
重启Jupyter内核后重新运行代码测试速度,也可主动释放无用内存:import gc # 替换为不需要的大体积变量名 del unused_var gc.collect() - 依赖库版本变更
若近期更新过pandas、numpy等依赖库,新版本可能存在性能bug,或是切换了未适配的虚拟环境,都会导致运行速度下降。
解决方案:
查看当前pandas版本:pd.__version__,回滚到之前正常运行时的历史版本即可:pip install pandas==[历史正常版本号] - 磁盘IO被占用
pd.read_csv为磁盘IO操作,若桌面所在磁盘剩余空间不足、存在坏道,或是后台有杀毒软件扫描、云盘同步等进程占用磁盘读写,都会拖慢读取速度,内存不足时触发的虚拟内存交换也会受磁盘性能影响。
解决方案:
确保磁盘剩余空间≥10%,暂时关闭后台高IO进程(暂停云同步、关闭杀毒软件实时扫描)后再测试速度。 - 计算逻辑隐性冗余
若训练集中新增了非数值列,train.corr()默认会对所有数值列做两两相关计算,计算量随列数呈平方级增长,会大幅抬高耗时。
解决方案:
计算相关系数时仅指定需要的列,减少不必要的计算开销:corr = train[['claim', '其他需要计算相关的列名']].corr()
注意:pd.set_option('display.max_column', 120)仅控制Jupyter的列展示数量,与读取、计算性能无关联,因此调整该参数无法解决性能问题
内容的提问来源于stack exchange,提问作者Khadija
相关产品推荐
相关产品推荐

