Pandas Dataframe显示在网页上

时间:2014-03-04 19:19:54

标签: python pandas flask

我正在使用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)

模板analysis.html看起来像

{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{data}}
{% endblock %}

这可行,但输出看起来很糟糕。它不使用换行符等。 我玩过data.to_html()data.to_string() 显示框架最简单的方法是什么?

4 个答案:

答案 0 :(得分:40)

以下内容应该有效:

@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())
                                                                # ^^^^^^^^^

检查the documentation是否有其他选项,例如CSS样式。

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

{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{data | safe}}
{% endblock %}

为了告诉Jinja你正在传递加价。感谢@SeanVieira提示。

答案 1 :(得分:19)

好的,我已经设法得到一些非常好的结果,现在结合我在这里得到的提示。在实际的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)

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

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

bootstrap还有很多其他选项,请点击此处: http://getbootstrap.com/css/#tables

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

下一个问题显然是如何绘制这样的框架。有没有任何Bokeh经验?

感谢Matt和Sean。

托马斯

答案 2 :(得分:3)

遍历df的行

如果您需要将df设置为可以遍历html行的格式,请使用to_dict(orient='records'),它会以以下格式生成dict

‘records’ : list like [{column -> value}, … , {column -> value}]

这样,您可以使用自己的方式在html中显示数据。 现在,示例代码如下所示:

使用烧瓶的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.to_dict(orient='records'))

带有jinja的HTML代码

{% extends "base.html" %}
    {% block content %}
    <table class="table">
        <thead>
            <tr>
                <th scope="col">Column name 1</th>
                <th scope="col">Column name 2</th>
                <th scope="col">Column name 3</th>
            </tr>
        </thead>
        <tbody>
        {% for row in data %}
            <tr>
                <td>{{row['Column name 1']}}</td>
                <td>{{row['Column name 2']}}</td>
                <td>{{row['Column name 2']}}</td>
            </tr>
        {% endfor %}
        </tbody>
    </table>
    {% endblock %}

答案 3 :(得分:0)

您可以使用enaml-web来显示熊猫数据框并与之交互。

一些例子:

  

注意:交互(排序,过滤等)需要具有websocket支持的服务器。