我一直在按照 TDS 帖子 here 中的指南进行这种简单的 Netflix 数据分析实践。我开始在 Jupyter Notebook 上运行代码,但遇到了 NameError: name 'Counter' is not defined
并试图了解原因。
出于好奇,我尝试在 PyCharm 上运行相同的代码,它似乎运行良好,这可能非常简单,但我的问题是,我在 Jupyter 上遗漏了什么,为什么它在 PyCharm 上运行?我错过了什么吗?
来自 PyCharm 的快照:
来自 Jupyter 的快照:
如果有帮助,我已经上传了 here, ln [14]。
答案 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
类,所以我认为这是您想要的第一个选项。