Pyviz 面板:无法使用 FileInput 小部件
Pyviz panel: can't work with FileInput widget
我一定是遗漏了一些关于如何 FileInput widget works in pyviz panel 的基本知识。
在下面的代码中,我让用户 select 一个 csv 文件和要显示的行数。如果文件未被 selected,我会生成一些随机数据。
import pandas as pd; import numpy as np; import matplotlib.pyplot as plt
import panel as pn
import panel.widgets as pnw
pn.extension()
datafile = pnw.FileInput()
head = pnw.IntSlider(name='head', value=3, start=1, end=60)
@pn.depends(datafile, head)
def f(datafile, head):
if datafile is None:
data = pd.DataFrame({'x': np.random.rand(10)})
else:
data = pd.read_csv(datafile)
return pn.Column(f'## {head} first rows', data.head(head))
widgets = pn.Column(datafile, head)
col = pn.Column(widgets, f)
col
问题来了。如果我不 select 文件并使用 head
小部件,则窗格会按预期运行:显示的行数随着我更改 head
小部件而变化,我可以看到每次更新后数据都不一样。
但是,一旦我select一个文件,就会出现两个问题。首先,数据未加载。其次,专栏不再对我的互动做出反应。
谁能告诉我我的问题是什么?
上面代码中的问题是函数f
中的datafile
变量不是文件名而是文件内容,作为一个字节串。由于错误,该函数抛出一个未处理的异常,不幸的是,该异常未在任何地方注册。
因此,数据读取线应该是
data = pd.read_csv(io.BytesIO(datafile))
我一定是遗漏了一些关于如何 FileInput widget works in pyviz panel 的基本知识。
在下面的代码中,我让用户 select 一个 csv 文件和要显示的行数。如果文件未被 selected,我会生成一些随机数据。
import pandas as pd; import numpy as np; import matplotlib.pyplot as plt
import panel as pn
import panel.widgets as pnw
pn.extension()
datafile = pnw.FileInput()
head = pnw.IntSlider(name='head', value=3, start=1, end=60)
@pn.depends(datafile, head)
def f(datafile, head):
if datafile is None:
data = pd.DataFrame({'x': np.random.rand(10)})
else:
data = pd.read_csv(datafile)
return pn.Column(f'## {head} first rows', data.head(head))
widgets = pn.Column(datafile, head)
col = pn.Column(widgets, f)
col
问题来了。如果我不 select 文件并使用 head
小部件,则窗格会按预期运行:显示的行数随着我更改 head
小部件而变化,我可以看到每次更新后数据都不一样。
但是,一旦我select一个文件,就会出现两个问题。首先,数据未加载。其次,专栏不再对我的互动做出反应。
谁能告诉我我的问题是什么?
上面代码中的问题是函数f
中的datafile
变量不是文件名而是文件内容,作为一个字节串。由于错误,该函数抛出一个未处理的异常,不幸的是,该异常未在任何地方注册。
因此,数据读取线应该是
data = pd.read_csv(io.BytesIO(datafile))