调用make_dashboard函数触发AttributeError:'int'对象无squeeze属性
解决AttributeError: 'int' object has no attribute 'squeeze'的问题
这个错误很好定位——你调用的squeeze()方法是给序列型数据(比如pandas Series、numpy数组)设计的,用来移除多余的单维度轴,但你传给make_dashboard的x=1952、gdp_change=6.0这些都是单个整数/浮点数,属于Python基本数据类型,它们根本没有这个方法,自然会报错。
再往深了说,你用的p.line()(应该是Bokeh库的绘图方法吧?)本身就需要传入一组数据的序列(比如列表、数组)来生成折线,单个数值根本没法画出折线,这才是问题的根源。
给你两种针对性的解决方案:
方案1:绘制多组数据(正常折线图场景)
如果你本来就想展示多个年份的GDP和失业率变化,那需要把参数改成序列类型,比如列表、numpy数组或者pandas Series:
# 模拟多年份数据 x = [1952, 1953, 1954, 1955] gdp_change = [6.0, 5.7, 7.1, 6.5] unemployment = [3.025, 3.1, 2.9, 3.0] # 调用函数 make_dashboard(x=x, gdp_change=gdp_change, unemployment=unemployment, title='dashboard', file_name='index.html')
另外,如果你的数据有时候是带单维度的序列、有时候是普通序列,可以考虑在函数里去掉不必要的squeeze()调用(毕竟多数情况下,直接传入序列就能正常绘图):
def make_dashboard(x, gdp_change, unemployment, title, file_name): output_file(file_name) p = figure(title=title, x_axis_label='year', y_axis_label='%') # 移除squeeze(),直接使用传入的序列 p.line(x, gdp_change, color="firebrick", line_width=4, legend="% GDP change") p.line(x, unemployment, line_width=4, legend="% unemployed") show(p)
方案2:仅展示单个年份的数据
如果你确实只需要展示某一年的数值,那折线图就不适用了,应该换成散点标记(比如circle),同时同样不需要squeeze():
def make_dashboard(x, gdp_change, unemployment, title, file_name): output_file(file_name) p = figure(title=title, x_axis_label='year', y_axis_label='%') # 用散点标记替代折线 p.circle(x, gdp_change, color="firebrick", size=12, legend="% GDP change") p.circle(x, unemployment, size=12, legend="% unemployed") show(p)
这样传入单个数值也能正常显示数据点了。
内容的提问来源于stack exchange,提问作者Pratik Raj
相关产品推荐
相关产品推荐

