我有一个绘制两个直方图的函数,以及一种从作业中提供给我的表中计算某些统计信息的方法。当我在jupyter笔记本中运行此功能时,将得到以下输出:
None #Not quite sure where this came from
(26.54, 4269775.77) #This is calculated correctly
<histogram 1> #This is rendered correctly
<histogram 2> #This is also rendered correctly
我的预期输出应该只是
(26.54, 4269775.77)
<histogram 1>
<histogram 2>
我尝试注释掉不同的行,以查看是否可以隔离问题,但无济于事。下面是我正在运行的代码,与上面的输出相对应
def compute_statistics(age_and_salary_data):
t = full_data
age = t.column('Age')
salary = t.column('Salary')
age_and_salary_data = Table().with_columns('Age', age, 'Salary', salary)
print(age_and_salary_data.hist('Age', bins = (np.arange(18,np.max(age)+1,1))))
average_age = np.mean(age)
average_salary = np.mean(salary)
average_list = (np.round(average_age, 2), np.round(average_salary,2))
return age_and_salary_data.hist('Salary', bins = np.arange(0,np.max(salary)+1, 1000000))
average_age = np.mean(full_data.column('Age'))
average_salary = np.mean(salary_data.column('Salary'))
average_list = (np.round(average_age, 2), np.round(average_salary, 2))
compute_statistics(full_data)
print(average_list)
当我通过平地机运行此程序时,我会遇到以下有关为什么我得到错误答案的答案。
>>> round(float(compute_statistics(full_data)[0]), 2) == 26.54
None
TypeError: 'NoneType' object is not subscriptable
# Error: expected
# True
# but got
# Traceback (most recent call last):
# ...
# TypeError: 'NoneType' object is not subscriptable
答案 0 :(得分:0)
继续使用该功能,并通过删除功能print
中的compute_statistics
语句并像其他直方图一样将直方图呈现为回报,从而摆脱了讨厌的问题。供参考:
def compute_statistics(age_and_salary_data):
age = full_data.column('Age')
salary = salary_data.column('Salary')
age_and_salary_data = Table().with_columns('Age', age, 'Salary', salary)
average_age = np.mean(age)
average_salary = np.mean(salary)
average_list = (np.round(average_age, 2), np.round(average_salary,2))
return age_and_salary_data.hist('Salary', bins = np.arange(min(salary),max(salary)+1, 1000000)), age_and_salary_data.hist('Age', bins = (np.arange(min(age),max(age)+1,1)))
average_age = np.mean(full_data.column('Age'))
average_salary = np.mean(salary_data.column('Salary'))
average_list = (np.round(average_age, 2), np.round(average_salary, 2))
compute_statistics(full_data)
print(average_list)
虽然这解决了我的问题,但我想可以将其视为答案,但我仍然不确定为什么要按照我的工作做,而不要出具印刷声明,任何见识都会受到赞赏
答案 1 :(得分:0)
在笔记本中:调用compute_statistics(full_data)
,print
是.hist
方法的一个结果,然后return
是另一个方法的结果。在这两种情况下,该方法都返回None
,因此print
会显示该内容,然后return
ed的值也为None,但是代码中没有任何东西可以使用它。然后,您print(average_list)
,它将为您提供控制台中的最后一个值,并且您还将看到直方图。
.hist
方法可能会产生直方图作为副作用,并返回None
,因为没有返回值。
round(float(compute_statistics(full_data)[0]), 2) == 26.54
这是测试代码的样子。它期望在调用average_list
时重新获得compute_statistics
值,以便可以提取平均年龄,将其取整,然后与期望值进行比较。但是,它收到None
,但不能下标。
测试代码根本不在乎您print
。 (我假设在提供的datascience
库中,.hist
方法进行了某种跟踪,以确保您进行了预期的绘制这些直方图的调用。)
再次阅读分配规范,并确保您了解return
和print
的区别。