我正在使用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()
显示框架最简单的方法是什么?
答案 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
设置为可以遍历html行的格式,请使用to_dict(orient='records')
,它会以以下格式生成dict
:
‘records’ : list like [{column -> value}, … , {column -> value}]
这样,您可以使用自己的方式在html中显示数据。 现在,示例代码如下所示:
@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'))
{% 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支持的服务器。