Python 熊猫不';不允许通过新属性名创建列[SQL的Bokeh plot with slider callback]

Python 熊猫不';不允许通过新属性名创建列[SQL的Bokeh plot with slider callback],python,sql,pandas,plot,bokeh,Python,Sql,Pandas,Plot,Bokeh,我正在尝试用一个滑块来制作一个交互式绘图。该图将按顺序显示年度费用。滑块将更改数据的年份。我想我需要使用Bokeh服务器 使用panda,我从本地MySQL服务器运行一个查询,得到以下类型的表 类别总数 0 Foo 11.00 1巴51.37 2福巴114.86 代码,这几乎是有效的 #SliderTest.py #初始化 年份=2012年 query=SqlCmds.R_YearlyTopExpenses(年) source=pd.read\u sql\u查询(查询,con=connecti

我正在尝试用一个滑块来制作一个交互式绘图。该图将按顺序显示年度费用。滑块将更改数据的年份。我想我需要使用Bokeh服务器

使用panda,我从本地MySQL服务器运行一个查询,得到以下类型的表

类别总数
0 Foo 11.00
1巴51.37
2福巴114.86
代码,这几乎是有效的

#SliderTest.py
#初始化
年份=2012年
query=SqlCmds.R_YearlyTopExpenses(年)
source=pd.read\u sql\u查询(查询,con=connection)
#创建绘图和小部件
图(
y_范围=源['CATEGORY'],
x_轴标签='金额',
y轴标签='Category',
绘图宽度=800
)
plot.hbar(
y=源['CATEGORY'],
右=源['TOTAL'],
左=0,
高度=0.5
)
滑块=滑块(
开始=2012年,
完2019年,
价值=2012年,
步骤=1,
title=“年”
)
#向小部件添加回调
def回调(属性、旧、新):
年份=年值
query=SqlCmds.R_YearlyTopExpenses(年)
new_data=pd.read_sql_query(query,con=connection)#已更改
source.data=新添加的数据
滑块。更改时(“值”,回调)
#在布局中排列绘图和小部件
布局=列(滑块、打印)
curdoc().添加根目录(布局)
我运行以下命令

bokeh发球——显示。\SliderTest.py
因此,我得到了以下结果:在绘图顶部有一个滑块,但绘图不随滑块更新,也不随标题更新

我看到回调中有一条警告,说
source
变量未使用

如何使绘图和标题根据滑块进行更改?

当您执行以下操作时:

source = pd.read_sql_query(query, con=connection)
在函数内部,您正在创建一个新的纯局部变量,该变量与上面定义的
源代码
完全相关,然后当函数退出时,它会立即被丢弃(这就是警告未使用它的原因)。然而,即使忽略这一点,也不是全面替换Bokeh
ColumnDataSource
对象的最佳实践。您需要做的是更新现有源:

source.data = new_data

如果您使用的是Bokeh>=1.3,那么
new_data
可以直接作为一个数据帧。否则会出现
ColumnDatatSource.data\u from_df(…)
statif方法,您必须首先调用数据帧将其转换为预期格式

我有版本1.2,但现在升级到1.3.1。我还编辑了函数中的代码(请参见初始问题,因为我无法在注释部分很好地设置更改的格式)。编辑后,我得到以下错误:UserWarning:Pandas不允许通过新属性名创建列这是Pandas问题,不是bokeh问题,我恐怕对此一无所知。