python - cleaning - Visualización de Pandas Dataframe en una página web
data cleaning python (2)
Estoy usando Flask, pero esto probablemente se aplica a muchos frameworks similares.
Construyo un marco de datos pandas, por ejemplo
@app.route(''/analysis/<filename>'')
def analysis(filename):
x = pd.DataFrame(np.random.randn(20, 5))
return render_template("analysis.html", name=filename, data=x)
La plantilla analysis.html parece
{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{data}}
{% endblock %}
Esto funciona, pero la salida se ve horrible. No usa linebreaks, etc. He jugado con data.to_html()
y data.to_string()
¿Cuál es la forma más fácil de mostrar un marco?
Lo siguiente debería funcionar:
@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())
# ^^^^^^^^^
Consulte pd.DataFrame.to_html() para ver opciones adicionales, como el estilo de CSS.
Además, debe ajustar su plantilla así:
{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{data | safe}}
{% endblock %}
para decirle a Jinja que estás pasando el marcado. Gracias a @SeanVieira por la propina.
Ok, he logrado obtener algunos resultados muy buenos combinando las pistas que tengo aquí. En el visor de Python real que uso
@app.route(''/analysis/<filename>'')
def analysis(filename):
x = pd.DataFrame(np.random.randn(20, 5))
return render_template("analysis.html", name=filename, data=x)
Por ejemplo, envío el marco de datos completo a la plantilla html. Mi plantilla html está basada en bootstrap. Por lo tanto, simplemente puedo escribir
{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{ data.to_html(classes="table table-striped") | safe}}
{% endblock %}
Hay muchas otras opciones con bootstrap, echa un vistazo aquí: http://getbootstrap.com/css/#tables
Base.html básicamente se copia desde aquí http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xii-facelift
La siguiente pregunta es, obviamente, cómo trazar ese marco. ¿Alguien tiene alguna experiencia con Bokeh?
Gracias a ambos por Matt y Sean.
Thomas