Jupyter Notebook 上的“NameError: name 'Counter' is not defined”但在 PyCharm 上工作正常?

时间:2021-01-17 16:01:24

标签: python jupyter-notebook pycharm

我一直在按照 TDS 帖子 here 中的指南进行这种简单的 Netflix 数据分析实践。我开始在 Jupyter Notebook 上运行代码,但遇到了 NameError: name 'Counter' is not defined 并试图了解原因。

出于好奇,我尝试在 PyCharm 上运行相同的代码,它似乎运行良好,这可能非常简单,但我的问题是,我在 Jupyter 上遗漏了什么,为什么它在 PyCharm 上运行?我错过了什么吗?

来自 PyCharm 的快照:

Snapshot from PyCharm

来自 Jupyter 的快照:

Snapshot from Jupyter

如果有帮助,我已经上传了 here, ln [14]。

1 个答案:

答案 0 :(得分:0)

在您的笔记本单元格 14 中:

def return_counter(data_frame, column_name, limit):
    from collections import Counter
print(dict(Counter(data_frame[column_name].values).most_common(limit)))

您在 Counter 函数的范围内(在函数范围内)导入 return_counter 类。通过这样做,名称 Counter 只为出现在该函数主体中的代码定义。然后在同一个单元格中,因为第三行与函数定义在同一级别缩进,您试图在全局(笔记本)范围内实例化 Counter 类。名称 Counter 在全局作用域中的那个点未定义,因此您会看到您看到的错误。

要解决此问题,请在函数内移动违规行:

def return_counter(data_frame, column_name, limit):
    from collections import Counter
    print(dict(Counter(data_frame[column_name].values).most_common(limit)))

或在全局范围内导入 Counter 对象

def return_counter(data_frame, column_name, limit):
    from collections import Counter
from collections import Counter
print(dict(Counter(data_frame[column_name].values).most_common(limit)))

正如您所拥有的,您的 return_counter 函数什么都不做,也没有理由导入 Counter 类,所以我认为这是您想要的第一个选项。