首页 > 解决方案 > Holoviz 面板不会在 Jupyter 笔记本中打印熊猫数据框行

问题描述

我正在尝试panel.interact使用 Pandas 数据框而不是 Dask 数据框重新创建 Holoviz 教程中的第一个示例。我得到了滑块,但熊猫数据框行没有显示。

请参阅原始示例:http ://holoviz.org/tutorial/Building_Panels.html

我已经尝试在 Holoviz 示例中使用 Dask。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扩展名中包含了一行,因为没有它,我会收到需要它的警告。没有它,我什至没有得到滑块。

我可以select_row(rowno=0)在 Jupyter 单元格中单独调用该函数并获得该行的漂亮打印输出,因此该函数似乎正在正常工作。

任何帮助使其工作的帮助将不胜感激。谢谢。

标签: pandasdataframejupyter-notebookholovizpanel-pyviz

解决方案


得到了解决方案。使用 Pandas,loc[rowno:rowno]返回一个pandas.core.frame.DataFrame长度为 1 的对象,它可以正常工作,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]


推荐阅读