javascript - 在 Jupyter 笔记本中运行的单元格期间,pandas 表中的变量未更新:从 javascript 调用 python 函数时出现问题
问题描述
我正在使用 pandas、python 和 javascript 在 Jupyter notebook 中编写代码。
我想监控产品的价格,这里假设产品的编号为“1234”和“5678”。
该表格每 5 秒更新一次,然后附加新价格,并在表格底部附上购买链接。此外,我还想一起显示点击计数器(df_cnt),即在 for 循环中的单元格运行期间,到目前为止您单击 pandas 表中的链接的次数(如下所示的#In[7])。
pandas 表中的可点击链接调用 javascript 函数 add(var1) #In[2],然后这个 add(var1) 执行 python 函数 add_func(x) #In[4],这会增加每个产品的点击次数。
问题
问题是#In[7]中显示的计数器(df_cnt)没有更新,即使我在#In[7]中运行单元格期间单击了链接,而在for循环完成后,计数器(df_cnt)在下一个单元格中正确更新(#In[8] 如下所示)。
我试过的
我试图改变javascript中的命令
kernel.execute( "df_cnt=add_func("+ var1 + ")") ;
至
kernel.execute( "df_cnt["+ var1 + "] += 1") ;
但结果是一样的。
如何在#In[7] 中动态更新 pandas 表 df_cnt?我感谢任何意见或建议。
代码
# In[1]:
import pandas as pd
import copy
from random import randint
from time import sleep
from IPython.display import display, clear_output
%%html
# In[2]:
<script>
function add(var1) {
var kernel = IPython.notebook.kernel;
kernel.execute( "df_cnt=add_func("+ var1 + ")") ;
alert(var1 + " is clicked." ) ;
};
</script>
# In[3]:
def row_wise_clickable_add(val):
return f'<a onclick="add(%s)" target="_blank">%s</a>'%(val,val)
# In[4]:
def add_func(x):
global df_cnt
df_cnt[x] +=1
return df_cnt
# In[5]:
df_cnt=pd.DataFrame([[0,0]],columns=[1234,5678]) # pandas table for click counter
df=pd.DataFrame([[0,0 ]],columns=[1234,5678] ) # pandas table for price monitoring
这是监控的功能。
# In[6]:
def monitor():
global df,df_cnt
sleep(5)
df_new=pd.DataFrame(data=[[int(randint(1,10)) for _ in range(2) ]],columns=[1234,5678])
df=df.append(df_new,sort=False).reset_index(drop=True)
df2=df.copy()
df_tmp=pd.DataFrame([df2.columns.tolist()],columns=df2.columns)
df2=df2.append(df_tmp.astype(int).rename(index={df_tmp.index[-1]: 'buy'}))
s=df2.style.format(row_wise_clickable_add, subset=pd.IndexSlice[ df2.index[-1], df2.columns.tolist()[0:]])
clear_output()
return s
在定义函数和初始化 pandas 表之后,主要部分开始。
# In[7]:
for k in range(7):
s=monitor()
print("Price monitor:")
display(s)
print("Click counter: ")
display(df_cnt) # not updated while running this cell...
完成上面的单元格后,点击计数器的熊猫表被更新,但不在上面显示的 for 循环中......
# In[8]:
df_cnt
解决方案
推荐阅读
- c# - 如何检测图像在网格中的正确位置 - wpf
- docker - gpg keyserver 接收失败 没有名字
- c++ - 由于没有文件或目录,在 VSC 上运行代码的问题
- r - 具有不同长度项目的(已经很宽的)数据的复杂重组
- r - 数据框中不同值的人口金字塔
- kubernetes - 如何让 pod 在 Kubernetes 上以 Flink 应用模式暴露 prometheus 监控端口?
- azure-devops - Azure DevOps - 看不到积压中的许多工作项
- spring - 是否有任何最佳实践来审核 Spring Rest 应用程序?
- python-3.x - 如何使不和谐机器人定时静音自动 5 分钟?
- r - 在 R 中创建具有匹配名称的较小向量子集的子集数据框