>

이것은 멍청한 질문으로 들릴지 모르지만, 파이썬이 최고의 언어 중 하나가 아니기 때문에 나는 그것에 갇혀 있습니다.

테이블이있는 html 페이지가 있고 그 안에 팬더 데이터 프레임을 표시하고 싶습니다. 가장 좋은 방법은 무엇입니까? pandasdataframe.to_html을 사용 하시겠습니까?

py

from flask import Flask;
import pandas as pd;
from pandas import DataFrame, read_csv;
file = r'C:\Users\myuser\Desktop\Test.csv'
df = pd.read_csv(file)
df.to_html(header="true", table_id="table")

html

<div class="table_entrances" style="overflow-x: auto;">
  <table id="table">
    <thead></thead> 
    <tr></tr>
  </table>
</div>

  • 답변 # 1

    작업 예 :

    파이썬 코드 :

    from flask import Flask, request, render_template, session, redirect
    import numpy as np
    import pandas as pd
    
    app = Flask(__name__)
    df = pd.DataFrame({'A': [0, 1, 2, 3, 4],
                       'B': [5, 6, 7, 8, 9],
                       'C': ['a', 'b', 'c--', 'd', 'e']})
    
    @app.route('/', methods=("POST", "GET"))
    def html_table():
        return render_template('simple.html',  tables=[df.to_html(classes='data')], titles=df.columns.values)
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0')
    
    

    html :

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    {% for table in tables %}
                {{titles[loop.index]}}
                {{ table|safe }}
    {% endfor %}
    </body>
    </html>
    
    

    또는 다른 용도

    return render_template('simple.html',  tables=[df.to_html(classes='data', header="true")])
    
    

    {{titles[loop.index]}} 를 제거  html에서 줄

    html에서 요소를 검사하는 경우

    <html lang="en"><head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body style="">
    
                <table border="1" class="dataframe data">
      <thead>
        <tr style="text-align: right;">
          <th></th>
          <th>A</th>
          <th>B</th>
          <th>C</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <th>0</th>
          <td>0</td>
          <td>5</td>
          <td>a</td>
        </tr>
        <tr>
          <th>1</th>
          <td>1</td>
          <td>6</td>
          <td>b</td>
        </tr>
        <tr>
          <th>2</th>
          <td>2</td>
          <td>7</td>
          <td>c--</td>
        </tr>
        <tr>
          <th>3</th>
          <td>3</td>
          <td>8</td>
          <td>d</td>
        </tr>
        <tr>
          <th>4</th>
          <td>4</td>
          <td>9</td>
          <td>e</td>
        </tr>
      </tbody>
    </table>
    
    </body></html>
    
    

    알다시피 표 html에 tbody와 thead가 있습니다. CSS를 쉽게 적용 할 수 있습니다.

  • 답변 # 2

    # Declare table
    class SomeTable(Table):
        status = Col('Customer')
        city = Col('City')
        product_price = Col('Country')    
    # Convert the pandas Dataframe into dictionary structure
    output_dict = output.to_dict(orient='records')  
    # Populate the table
    table = SomeTable(output_dict)
    return (table.__html__())
    
    

    또는 팬더가 정적 HTML 파일을 반환 할 때 Flask를 사용하여 페이지로 렌더링 할 수 있습니다

    @app.route('/<string:filename>/')
    def render_static(filename):
        return render_template('%s.html' % filename)
    
    

    플라스크에서 어떻게 할 수 있는지에 대한 아이디어입니다. 이 내용을 이해하고 도움이되지 않는 경우 알려 주시기 바랍니다.

    업데이트 :

    import pandas as pd
    df = pd.DataFrame({'col1': ['abc', 'def', 'tre'],
                       'col2': ['foo', 'bar', 'stuff']})
    
    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def hello_world():
        return df.to_html(header="true", table_id="table")
    if __name__ == '__main__':
        app.run(host='0.0.0.0', debug=True)
    
    

    하지만 스타일링으로 인해 DataFrame to HTML 대신 Flask HTML 기능을 사용합니다.

  • 답변 # 3

    누군가 도움이되는 경우를 대비하여. 작업을 수행하는 테이블에 버튼을 추가하는 기능을 포함하여 더 많은 사용자 정의가 필요했기 때문에 대안을 찾았습니다. 또한 표준 테이블 형식이 매우 추악하므로 IMHO가 마음에 들지 않습니다.

    ...
    df = pd.DataFrame({'Patient Name': ["Some name", "Another name"],
                           "Patient ID": [123, 456],
                           "Misc Data Point": [8, 53]})
    ...
    # link_column is the column that I want to add a button to
    return render_template("patient_list.html", column_names=df.columns.values, row_data=list(df.values.tolist()),
                               link_column="Patient ID", zip=zip)
    
    

    HTML 코드 : 모든 DF를 사용자 정의 가능한 HTML 테이블로 동적으로 변환합니다

    <table>
        <tr>
            {% for col in column_names %}
            <th>{{col}}</th>
            {% endfor %}
        </tr>
        {% for row in row_data %}
        <tr>
            {% for col, row_ in zip(column_names, row) %}
            {% if col == link_column %}
            <td>
                <button type="submit" value={{ row_ }} name="person_id" form="patient_form" class="patient_button">
                    {{ row_ }}
                </button>
            </td>
            {% else %}
            <td>{{row_}}</td>
            {% endif %}
            {% endfor %}
        </tr>
        {% endfor %}
    </table>
    
    

    CSS 코드

    table {
        font-family: arial, sans-serif;
        border-collapse: collapse;
        width: 100%;
    }
    td, th {
        border: 1px solid #dddddd;
        text-align: left;
        padding: 8px;
    }
    tr:nth-child(even) {
        background-color: #dddddd;
    }
    
    

    그것은 아주 잘 작동하며 .to_html 보다 더 잘 보입니다.  

  • 답변 # 4

    Jinja 's for loop를 사용하는 경우

    {% for table in tables %}
                {{titles[loop.index]}}
                {{ table|safe }}
    {% endfor %}
    
    

    각 문자를 1 씩 1 씩 인쇄했기 때문에 많은 작업이 필요했습니다.

    {{ table|safe }}
    
    

관련 자료

  • 이전 python - 팬더 데이터 프레임을 반복하고 반복적 인 레코드로 다른 데이터 프레임을 만듭니다
  • 다음 reactjs - redux-form 7 검증 - 기능성 구성 요소