Flask+Pandas+CSV报表实现示例

以下是一个基于 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

<!DOCTYPE html>

<html>

<head>

<title>销售报表</title>

<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">

<link href="https://cdn.datatables.net/1.11.5/css/dataTables.bootstrap5.min.css" rel="stylesheet">

</head>

<body>

<div class="container mt-4">

<h2>销售汇总报表</h2>


<!-- 汇总表格 -->

<table class="table table-striped table-bordered" id="summaryTable">

<thead class="table-dark">

<tr>

{% for column in data.columns %}

<th>{{ column }}</th>

{% endfor %}

</tr>

</thead>

<tbody>

{% for row in data.summary %}

<tr>

{% for column in data.columns %}

<td>{{ row[column] | default(0) | round(2) }}</td>

{% endfor %}

</tr>

{% endfor %}

</tbody>

</table>


<h3 class="mt-5">原始数据</h3>


<!-- 原始数据表格 -->

<table class="table table-hover" id="rawDataTable">

<thead>

<tr>

<th>Date</th>

<th>Product</th>

<th>Amount</th>

<th>Region</th>

</tr>

</thead>

<tbody>

{% for item in data.raw_data %}

<tr>

<td>{{ item.Date }}</td>

<td>{{ item.Product }}</td>

<td>{{ "yen%.2f" | format(item.Amount) }}</td>

<td>{{ item.Region }}</td>

</tr>

{% endfor %}

</tbody>

</table>

</div>


<!-- 添加交互功能 -->

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>

<script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>

<script src="https://cdn.datatables.net/1.11.5/js/dataTables.bootstrap5.min.js"></script>


<script>

$(document).ready(function() {

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

paging: true,

searching: true,

ordering: true,

info: true

});

});

</script>

</body>

</html>

5. 运行与使用

  1. 安装依赖:

bash

pip install flask pandas

  1. 运行应用:

bash

python app.py

  1. 访问报表:

http://localhost:5000/report

功能特点:

  1. 数据加载与处理

O 自动解析日期字段

O 金额数据校验

O 按月/地区汇总数据

  1. 可视化展示

O 响应式Bootstrap布局

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

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

  1. 数据格式化

O 金额显示为货币格式

O 数字保留两位小数

O 自动处理空值

扩展建议:

  1. 数据可视化增强

python

# 添加图表支持(在load_data函数中添加)

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')

  1. 添加数据过滤

python

# 在路由中添加过滤参数

@app.route('/report')

def show_report():

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

# 添加过滤逻辑

  1. 导出功能

html

<!-- 在HTML中添加导出按钮 -->

<button onclick="exportExcel()" class="btn btn-success">导出Excel</button>


<script>

function exportExcel() {

window.location = '/export'

}

</script>

这个实现方案结合了:

  • Flask 作为Web框架
  • Pandas 进行数据处理
  • CSV 作为数据存储
  • Bootstrap 用于界面美化
  • DataTables 实现交互式表格

可以根据实际需求调整数据处理逻辑和展示样式,建议在正式环境中添加以下改进:

  • 增加异常处理
  • 添加用户认证
  • 优化大数据量处理
  • 添加缓存机制
  • 使用生产级Web服务器(如Gunicorn)

相关文章

Python实现圆形面积与周长计算

任务要求1.数学公式:周长公式:C = 2πr面积公式:S = πr^22.输入规范:支持纯数字或带"cm"单位的输入(如5或10cm)3.输出精度:结果保留两位小数并标注单位任务实现...

python函数format的使用

format()函数是Python中字符串格式化的一种常见方法。它允许将变量或常量的值插入到字符串中,并根据需要对其进行格式化。在Python中,可以使用不同的方式对字符串进行格式化,如%运算符、字符...