首页 > 解决方案 > Jupyter Notebook 上的“NameError: name 'Counter' is not defined”但在 PyCharm 上工作正常?

问题描述

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

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

来自 PyCharm 的快照:

来自 PyCharm 的快照

来自 Jupyter 的快照:

来自 Jupyter 的快照

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

标签: pythonjupyter-notebookpycharm

解决方案


在您的笔记本单元格 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类,所以我认为这是你想要的第一个选项。


推荐阅读