Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在网页上显示数据帧_Python_Pandas_Flask - Fatal编程技术网

Python 在网页上显示数据帧

Python 在网页上显示数据帧,python,pandas,flask,Python,Pandas,Flask,我正在使用Flask,但这可能适用于许多类似的框架 我构建了一个数据框架,例如 @app.route('/analysis/<filename>') def analysis(filename): x = pd.DataFrame(np.random.randn(20, 5)) return render_template("analysis.html", name=filename, data=x) @app.route(“/analysis/”) def分析(文

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

我构建了一个数据框架,例如

@app.route('/analysis/<filename>')
def analysis(filename):
    x = pd.DataFrame(np.random.randn(20, 5))
    return render_template("analysis.html", name=filename, data=x)
@app.route(“/analysis/”)
def分析(文件名):
x=pd.DataFrame(np.random.randn(20,5))
返回render_模板(“analysis.html”,name=filename,data=x)
template analysis.html如下所示

{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{data}}
{% endblock %}
{%extends“base.html”%}
{%block content%}
{{name}}
{{data}}
{%endblock%}
这是可行的,但是输出看起来很糟糕。它不使用换行符等。 我玩过
data.to_html()
data.to_string()

显示帧的最简单方法是什么?

以下方法应适用:

@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())
                                                                # ^^^^^^^^^
@app.route(“/analysis/”)
def分析(文件名):
x=pd.DataFrame(np.random.randn(20,5))
返回render_模板(“analysis.html”,name=filename,data=x.to_html())
# ^^^^^^^^^
检查其他选项,如CSS样式

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

{%extends“base.html”%}
{%block content%}
{{name}}
{{数据|安全}
{%endblock%}

为了告诉Jinja你在传递标记。感谢您的提示。

好的,现在结合这里的提示,我已经获得了一些非常好的结果。在我使用的实际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)
@app.route(“/analysis/”)
def分析(文件名):
x=pd.DataFrame(np.random.randn(20,5))
返回render_模板(“analysis.html”,name=filename,data=x)
e、 我将完整的数据框发送到html模板。我的html模板是基于引导的。因此,我可以简单地写

{% extends "base.html" %}
{% block content %}
<h1>{{name}}</h1>
{{ data.to_html(classes="table table-striped") | safe}}
{% endblock %}
{%extends“base.html”%}
{%block content%}
{{name}}
{{data.to_html(classes=“table striped”)| safe}
{%endblock%}
引导还有许多其他选项,请查看此处:

Base.html基本上是从这里复制的

下一个问题显然是如何绘制这样一个框架。有人有博克的经验吗

谢谢马特和肖恩

thomas

您可以使用它来显示熊猫数据帧并与之交互

举几个例子:

  • 带过滤-
  • 简单查看器-
注意:交互(排序、筛选等)需要支持websocket的服务器

在df的行上迭代 如果您需要将
df
的格式设置为可以在html中的行上进行迭代,则使用
来记录(orient='records')
,这将以以下格式生成
dict

‘records’ : list like [{column -> value}, … , {column -> value}]
这样,您就可以使用自己的方式在html中显示数据。 示例代码现在如下所示:

使用flask的Python代码
@app.route(“/analysis/”)
def分析(文件名):
x=pd.DataFrame(np.random.randn(20,5))
返回render_模板(“analysis.html”,name=filename,data=x.to_dict(orient='records'))
带有jinja的HTML代码
{%extends“base.html”%}
{%block content%}
列名1
列名2
列名3
{数据%中的行为%1}
{{行['列名称1']}
{{行['列名称2']}
{{行['列名称2']}
{%endfor%}
{%endblock%}

您是否尝试过在
块中显示它?还有,您遇到了什么问题?它不会呈现html。但是,尽管如此,我对html一无所知。也许我应该在这里投资一些时间。对我有用…给大家一个提示:看看你的数据框是否包含非unicode字符串,并将它们转换成unicode;否则,每当出现一些意外字符时,Jinja2将无法呈现模板。或者
to_html()?我个人曾在Jinja2上使用它来简化数据帧的显示——仅供内部管理员使用——无论是在每次排序/筛选时立即加载还是通过ajax重新加载。不过,我正在寻找更好的解决方案。@tschm-确保不要同时进行两项更改-要么使用原始函数并添加
标记,要么使用
将框架转换为\u html()
@tschm-如果要以html形式传递数据,则必须告诉Jinja不要逃避它。试试
{data | safe}}
(没有任何
pre
标签)。@tschm-我更新了上面的答案,希望能给你完整的解决方案,包括Sean Vieira关于Jinja模板的建议。如果您觉得它有助于解决您的问题,请随意单击复选标记并选择它作为正确答案。谢谢@当然。默认情况下,该表具有
class=“dataframe”
,因此,将其与选择器结合起来,对
行中的
元素和其余行中的
元素进行样式设置,可以得到一些非常奇妙的结果。你甚至可以每隔一行加亮显示一次,改变鼠标的颜色等等。使用CSS3:)@tschm check out的强大功能,所有这些都是可能的-您可以设计自己的参数,然后(希望)根据生成的HTML调整CSS。如果您需要向不同的行添加类名(您可能不需要,这取决于它们如何生成CSS选择器),那么您只需在将其传递到模板呈现引擎之前对由
frame.to_html()
生成的字符串进行一点处理即可。使用na_rep选项也很有帮助,例如data.to_html(类=“table table striped”,na_rep=“-”)。使用datatables.net可以对列进行正确排序(假设所有条目都是数字)。
@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 %}