web-dev-qa-db-fra.com

Pandas Dataframe affiché sur une page Web

J'utilise Flask mais cela s'applique probablement à beaucoup de frameworks similaires.

Je construis un pandas Dataframe, par exemple.

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

Le template analysis.html ressemble à

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

Cela fonctionne mais la sortie semble horrible. Il n’utilise pas de sauts de ligne, etc., j’ai joué avec les fonctions data.to_html() et data.to_string()

29
tschm

Ce qui suit devrait fonctionner:

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

Vérifiez la documentation pour des options supplémentaires comme le style CSS.

De plus, vous devez ajuster votre modèle comme suit:

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

afin de dire à Jinja que vous passez dans le balisage. Merci à @SeanVieira pour le conseil.

38
MattDMo

Ok, j’ai réussi à obtenir de très beaux résultats en combinant maintenant les indices que j’ai obtenus ici. Dans le visualiseur Python que j'utilise

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

par exemple. J'envoie le dataframe complet au modèle html. Mon modèle html est basé sur bootstrap. Je peux donc simplement écrire

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

Il existe de nombreuses autres options avec bootstrap, consultez ici: http://getbootstrap.com/css/#tables

Base.html est essentiellement copié à partir d'ici http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-xii-facelift

La question suivante est évidemment de savoir comment tracer un tel cadre. Quelqu'un a une expérience avec Bokeh?

Merci à vous deux, Matt et Sean.

thomas

19
tschm

Vous pouvez utiliser enaml-web pour afficher et interagir avec des cadres de données de pandas. 

Quelques exemples:

Remarque: l'interaction (tri, filtrage, etc.) nécessite un serveur prenant en charge Websocket.

0
frmdstryr