Flask+Pandas+CSV报表实现示例

360影视 动漫周边 2025-05-14 15:08 1

摘要:2023-01-01,Product A,1500.00,North

以下是一个基于 Flask + Pandas + CSV 的简单报表实现示例,包含数据加载、处理和可视化展示:

1. 项目结构

bash

flask-report/

├── app.py

├── data/

│ └── sales_data.csv

└── templates/

└── report.html

2. CSV 数据示例 (data/sales_data.csv)

csv

Date,Product,Amount,Region

2023-01-01,Product A,1500.00,North

2023-01-02,Product B,2000.00,South

2023-01-03,Product C,1800.00,East

...(更多测试数据)

3. Flask 应用 (app.py)

python

from flask import Flask, render_template

import pandas as pd

app = Flask(__name__)

def load_data:

"""加载并处理CSV数据"""

try:

df = pd.read_csv('data/sales_data.csv', parse_dates=['Date'])

# 数据清洗和处理示例

df['Month'] = df['Date'].dt.strftime('%Y-%m')

df['Amount'] = pd.to_numeric(df['Amount'], errors='coerce')

# 创建汇总数据

summary = df.groupby(['Month', 'Region'])['Amount'].sum.unstack.reset_index

return {

'raw_data': df.to_dict('records'),

'summary': summary.to_dict('records'),

'columns': summary.columns.tolist

}

except Exception as e:

print(f"Error loading data: {str(e)}")

return None

@app.route('/report')

def show_report:

"""报表展示路由"""

data = load_data

if data is None:

return "数据加载失败,请检查数据文件"

return render_template('report.html', data=data)

if __name__ == '__main__':

app.run(debug=True)

4. 模板文件 (templates/report.html)

html

销售报表

销售汇总报表

{% for column in data.columns %}

{{ column }}

{% endfor %}

{% for row in data.summary %}

{{ row[column] | default(0) | round(2) }}

{% endfor %}

{% endfor %}

原始数据

Date

Product

Amount

Region

{% for item in data.raw_data %}

{{ item.Date }}

{{ item.Product }}

{{ "¥%.2f" | format(item.Amount) }}

{{ item.Region }}

{% endfor %}

$(document).ready(function {

$('#summaryTable, #rawDataTable').DataTable({

paging: true,

searching: true,

ordering: true,

info: true

});

});

5. 运行与使用

安装依赖:

bash

pip install flask pandas

运行应用:

bash

python app.py

访问报表:

功能特点:

数据加载与处理

Ø 自动解析日期字段

Ø 金额数据校验

Ø 按月/地区汇总数据

可视化展示

Ø 响应式Bootstrap布局

Ø 交互式排序和搜索(DataTables插件)

Ø 双表格展示(汇总数据 + 原始数据)

数据格式化

Ø 金额显示为货币格式

Ø 数字保留两位小数

Ø 自动处理空值

扩展建议:

数据可视化增强

python

import matplotlib.pyplot as plt

def generate_chart:

df = pd.read_csv('data/sales_data.csv')

plt.figure

df.groupby('Product')['Amount'].sum.plot.pie(autopct='%1.1f%%')

plt.savefig('static/sales_pie.png')

添加数据过滤

python

# 在路由中添加过滤参数

@app.route('/report')

def show_report:

region = request.args.get('region')

# 添加过滤逻辑

导出功能

html

导出Excel

function exportExcel {

window.location = '/export'

}

Flask 作为Web框架Pandas 进行数据处理CSV 作为数据存储Bootstrap 用于界面美化DataTables 实现交互式表格增加异常处理添加用户认证优化大数据量处理添加缓存机制使用生产级Web服务器(如Gunicorn)

来源:老客数据一点号

相关推荐