Панель Pyviz: не работает с виджетом FileInput - PullRequest
0 голосов
/ 09 февраля 2020

Мне, должно быть, не хватает чего-то базового c о том, как FileInput виджет работает в панель pyviz .

В следующем коде я разрешаю пользователю выбрать CSV-файл и количество строк для отображения. Если файл не выбран, я генерирую случайные данные.



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

Вот проблема. Если я не выбираю файл и не играю с виджетом head, панель работает должным образом: количество отображаемых строк изменяется при изменении виджета head, и я вижу, что данные меняются после каждого обновления ,

Однако при выборе файла возникают две проблемы. Во-первых, данные не загружены. Во-вторых, колонка перестает реагировать на мои взаимодействия.

Кто-нибудь может сказать мне, в чем моя проблема?

1 Ответ

0 голосов
/ 09 февраля 2020

Проблема в приведенном выше коде состоит в том, что переменная datafile в функции f является не именем файла, а содержимым файла в виде строки байтов. Из-за ошибки функция выдает необработанное исключение, которое, к сожалению, нигде не зарегистрировано.

Таким образом, строка чтения данных должна быть

data = pd.read_csv(io.BytesIO(datafile))

...