在Jupyter中调用df.mean()触发"Javascript Error: too much recursion"的原因
问题原因与解决方案
问题根源
这个Javascript递归错误是Jupyter Notebook前端渲染层的问题,和Python代码本身无关:
- 当执行
sensors.mean()这类操作后,Notebook会自动尝试在浏览器中渲染返回的结果对象(比如包含51个元素的Series),Firefox的Javascript引擎在处理大对象渲染时触发了递归溢出。 - 调高Python递归上限不会影响前端的Javascript运行环境,因此无效。
可行解决方案
- 禁止自动输出结果:在代码末尾加分号,不让Notebook渲染结果对象
means = sensors.mean(axis=0, skipna=True); # 末尾加; sensors.fillna(sensors.mean(), inplace=True); - 仅对数值列计算均值:明确指定只处理传感器数值列,排除非数值列(比如
machine_status),减少结果对象的复杂度numeric_cols = sensors.select_dtypes(include=['float64', 'int64']).columns means = sensors[numeric_cols].mean(axis=0, skipna=True); sensors[numeric_cols] = sensors[numeric_cols].fillna(means); - 调整Jupyter显示设置:限制输出的行数和列数,降低前端渲染压力
import pandas as pd pd.set_option('display.max_rows', 10) pd.set_option('display.max_columns', 10) - 更换浏览器或环境:切换到Chrome浏览器,或者使用Jupyter Lab替代传统Jupyter Notebook,前者的前端渲染机制更稳定。
内容的提问来源于stack exchange,提问作者DrNuke
相关产品推荐
相关产品推荐

