Вы можете использовать df.style
(пример Styler
) для визуализации DataFrame
в виде сетки входов HTML.
np.random.seed(0)
df = pd.DataFrame(np.random.randint(0, 100, (3, 3)))
df.style.format('<input name="df" value="{}" />').render()
Это будет отображаться как

Если вы обернуть результат в <form>
и представить его в какой-то конечной точки, строки запроса запроса (или POST
тела) будет выглядеть
df=44&df=47&df=64&df=67&df=67&df=9&df=83&df=21&df=36
Обратите внимание, что это ячейки кадра данных в строчном порядке. На данный момент, вы можете повторно создать фрейм данных с помощью
df = pd.DataFrame(np.asarray(request.values.getlist('df'), dtype=np.int).reshape((3, 3)))
Как вы предложили в своем комментарии, другой подход к имени HTML входам с именем столбца, чтобы избежать необходимости изменить данные.
def html_input(c):
return '<input name="{}" value="{{}}" />'.format(c)
df.style.format({c: html_input(c) for c in df.columns}).render()
Данные, отправляемые на сервер будет выглядеть
0=44&1=47&2=64&0=67&1=67&2=9&0=83&1=21&2=36
и вы можете восстановить кадр данных с помощью
df = pd.DataFrame(request.values.lists())
Это более элегантно, чем выше, отдельно от необходимо создать словарь форматирования {c: html_input(c) for c in df.columns}
. К сожалению, функция форматирования передается только значение и ни одна из информации индекса.
Ну, в этот момент вы создаете веб-приложение ... так что для изменения частей таблицы в редактируемые поля вам понадобится JavaScript, щелкнув AJAX (или веб-сокеты, если вы хотите быть фантазией), чтобы обновить поле, когда пользователь выполнил редактирование и т. д. и т. д. и т. д. –
Не нужно использовать JavaScript. Я рад, если есть способ создать форму или модель как-то, а затем отправить ее обратно на сервер с кнопкой отправки, которая переконвертирует его в dataframe – Nickpick