python - Jupyter Notebook 上的“NameError: name 'Counter' is not defined”但在 PyCharm 上工作正常?
问题描述
我一直在按照此处TDS 帖子中的指南进行此简单的 Netflix 数据分析练习。我开始在 Jupyter Notebook 上运行代码,但遇到NameError: name 'Counter' is not defined
并试图了解原因。
出于好奇,我尝试在 PyCharm 上运行相同的代码,它似乎工作正常,这可能很简单,但我的问题是,我在 Jupyter 上缺少什么,为什么它在 PyCharm 上工作?我错过了什么吗?
来自 PyCharm 的快照:
来自 Jupyter 的快照:
如果有帮助,我已经在这里上传了,ln [14]。
解决方案
在您的笔记本单元格 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
类,所以我认为这是你想要的第一个选项。
推荐阅读
- java - Initialization-on-demand holder idiom - 什么时候加载类?
- airflow - 气流 > S3 连接在工作人员上失败
- python - 在张量流中将密集向量乘以稀疏矩阵
- java - Java 程序未进入 if 语句
- c++ - c++,我正在制作一个程序来计算一个字母在文件中出现的次数
- alloy - 找不到名称“div”...嗯?为什么?
- django - 更改最终用户的 postgres 密码
- python - 将 PyCharm 交互式 shell 中的最后一个命令移动到脚本
- acumatica - 折扣百分比或价格的一般查询
- google-sheets-api - 来自 Ruby 的 Google Sheets_V4 API:如何获取命名范围的_spreadsheet_values