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

Nic*_*ick 6 edit flask pandas

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

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

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

Igo*_*ush 9

您可以使用df.style(Styler实例)将DataFrameHTML输入呈现为网格.

np.random.seed(0)

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

这将呈现为

HTML表格

如果将结果包装在a中<form>并将其提交到某个端点,请求查询字符串(或POST正文)将如下所示

df=44&df=47&df=64&df=67&df=67&df=9&df=83&df=21&df=36 
Run Code Online (Sandbox Code Playgroud)

请注意,这些是行主要顺序的数据框的单元格.此时,您可以使用重新创建数据框

df = pd.DataFrame(np.asarray(request.values.getlist('df'), dtype=np.int).reshape((3, 3)))
Run Code Online (Sandbox Code Playgroud)

正如您在评论中所建议的那样,另一种方法是使用列名称命名HTML输入,以避免重新整形数据.

def html_input(c):
    return '<input name="{}" value="{{}}" />'.format(c)

df.style.format({c: html_input(c) for c in df.columns}).render()
Run Code Online (Sandbox Code Playgroud)

然后发送到服务器的数据看起来像

0=44&1=47&2=64&0=67&1=67&2=9&0=83&1=21&2=36
Run Code Online (Sandbox Code Playgroud)

并且您可以使用恢复数据框

df = pd.DataFrame(request.values.lists())
Run Code Online (Sandbox Code Playgroud)

除了需要创建格式化程序字典之外,这比上面更优雅{c: html_input(c) for c in df.columns}.不幸的是,formatter函数只传递了值,而没有传递索引信息.