在flask html页面中编辑pandas数据框

问题描述 投票:6回答:1

在烧瓶中编辑pandas数据框的最佳方法是什么?

我有一个数据框,我想在带有烧瓶的HTML页面上输出(有很多例子如何做到这一点)。但是,我不只是想输出它,但我想让它可编辑。理想情况下,每个字段都应该是一个html输入字段。

我想避免必须手动创建表单,然后将其重新转换为数据帧。那有什么优雅的解决方案吗? pandas或任何其他软件包是否提供可以简化该任务的任何功能?

pandas flask edit
1个回答
8
投票

您可以使用df.styleStyler实例)将DataFrame渲染为HTML输入网格。

np.random.seed(0)

df = pd.DataFrame(np.random.randint(0, 100, (3, 3)))
df.style.format('<input name="df" value="{}" />').render()

这将呈现为

HTML table

如果将结果包装在<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}。不幸的是,formatter函数只传递了值,而没有传递索引信息。

© www.soinside.com 2019 - 2024. All rights reserved.