我正在尝试使用 Pandas 数据帧而不是 Dask 数据帧重新创建 Holoviz 教程中的第一个panel.interact
示例。我得到了滑块,但熊猫数据帧行没有显示。
请参阅原始示例:http://holoviz.org/tutorial/Building_Panels.html
我尝试使用Dask,如Holoviz示例。Dask 行打印出来很好,但它表明面板似乎在打印时处理 Dask 数据帧行的方式与 Pandas 数据帧行不同。这是我的最小代码:
import pandas as pd
import panel
l1 = ['a','b','c','d','a','b']
l2 = [1,2,3,4,5,6]
df = pd.DataFrame({'cat':l1,'val':l2})
def select_row(rowno=0):
row = df.loc[rowno]
return row
panel.extension()
panel.extension('katex')
panel.interact(select_row, rowno=(0, 5))
我在katex
扩展名中包含一行,因为没有它,我会收到需要它的警告。没有它,我什至没有得到滑块。
我可以在 Jupyter 单元格中单独调用select_row(rowno=0)
函数并获得该行的漂亮打印输出,因此看起来该函数正在正常工作。
任何帮助使其工作将不胜感激。谢谢。
有一个解决方案。对于 Pandas,loc[rowno:rowno]
返回一个长度为 1 的pandas.core.frame.DataFrame
对象,该对象适用于panel
,而 loc[rowno] 返回一个工作效果不佳的pandas.core.series.Series
对象。因此,像这样修改select_row()
函数使其全部工作:
def select_row(rowno=0):
row = df.loc[rowno:rowno]
return row
但是,仍然不确定为什么panel
会打印出Dataframe
对象而不是Series
对象。
注意:如果使用iloc
,则使用加+1,即df.iloc[rowno:rowno+1]
。