Pandas Dataframe显示在网页上

tsc*_*chm 35 python flask pandas

我正在使用Flask,但这可能适用于许多类似的框架.

我构建了一个pandas Dataframe,例如

@app.route('/analysis/<filename>')
def analysis(filename):
    x = pd.DataFrame(np.random.randn(20, 5))
    return render_template("analysis.html", name=filename, data=x)
Run Code Online (Sandbox Code Playgroud)

模板analysis.html看起来像

{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{data}}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

这可行,但输出看起来很糟糕.它不使用换行等,我已经打了data.to_html()data.to_string() 什么是显示一帧的最简单的方法?

Mat*_*DMo 44

以下应该有效:

@app.route('/analysis/<filename>')
def analysis(filename):
    x = pd.DataFrame(np.random.randn(20, 5))
    return render_template("analysis.html", name=filename, data=x.to_html())
                                                                # ^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

查看文档以获取CSS样式等其他选项.

此外,您需要调整模板,如下所示:

{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{data | safe}}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

为了告诉Jinja你正在传递标记.感谢@SeanVieira的提示.

  • @tschm - 如果你以HTML格式传递数据,你必须告诉Jinja不要逃避它.试试`{{data | 安全}}`(没有任何'pre`标签). (3认同)

tsc*_*chm 22

好吧,我已经设法得到一些非常好的结果,现在结合我在这里的提示.在我使用的实际Python查看器中

@app.route('/analysis/<filename>')
def analysis(filename):
    x = pd.DataFrame(np.random.randn(20, 5))
    return render_template("analysis.html", name=filename, data=x)
Run Code Online (Sandbox Code Playgroud)

例如,我将完整的数据帧发送到html模板.我的html模板基于bootstrap.因此,我可以简单地写

{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{ data.to_html(classes="table table-striped") | safe}}
{% endblock %}
Run Code Online (Sandbox Code Playgroud)

引导程序还有很多其他选项,请查看:http: //getbootstrap.com/css/#tables

Base.html基本上是从这里复制的 http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xii-facelift

接下来的问题显然是如何绘制这样的框架.有没有任何Bokeh经验?

谢谢Matt和Sean.

托马斯

  • 使用na_rep选项也很有帮助,例如data.to_html(classes ="table table-striped",na_rep =" - ").使用datatables.net,然后可以正确地对列进行排序(假设所有条目都是数字). (3认同)