在烧瓶中编辑pandas数据框的最佳方法是什么?
我有一个数据框,我想在带有烧瓶的HTML页面上输出(有很多例子如何做到这一点)。但是,我不只是想输出它,但我想让它可编辑。理想情况下,每个字段都应该是一个html输入字段。
我想避免必须手动创建表单,然后将其重新转换为数据帧。那有什么优雅的解决方案吗? pandas或任何其他软件包是否提供可以简化该任务的任何功能?
您可以使用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}
。不幸的是,formatter函数只传递了值,而没有传递索引信息。