在 flask html 页面中编辑 pandas 数据框
Edit pandas dataframe in flask html page
在 Flask 中编辑 pandas 数据框的最佳方法是什么?
我有一个数据框,我想用 flask 在 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}
。不幸的是,格式化程序函数只传递了值,以及 none 的索引信息。
在 Flask 中编辑 pandas 数据框的最佳方法是什么?
我有一个数据框,我想用 flask 在 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}
。不幸的是,格式化程序函数只传递了值,以及 none 的索引信息。