话不多说,有图有源码:
1.先看效果
2.实现代码
from flask import Flask, render_template
import pandas as pd
app = Flask(__name__)
# 自定义千分位格式化函数
def format_thousands(x):
return f'{x:,.2f}'
@app.route('/')
def show_dataframe():
path = r'F:\test_data\年度销售数据\2023年度销售数据.xlsx'
data = pd.read_excel(path, engine='openpyxl')
data['报审日期'] = pd.to_datetime(data['报审日期'])
columstype='季度'
if columstype=='年':
columstype_data = data['报审日期'].dt.year
elif columstype=='季度':
columstype_data = data['报审日期'].dt.quarter
else:
columstype_data = data['报审日期'].dt.month
# print(f"{type(month)},{month}")
# data['办事处部门_List'] = data['办事处部门'].apply(lambda x: x.tolist())
# data['事业部_List'] = data['事业部'].apply(lambda x: x.tolist())
# # 定义一个字典,将旧的key映射到新的key
# rename_dict = {
# 1: '1月',
# 2: '2月',
# 3: '3月',
# 4: '4月',
# 5: '5月',
# 6: '6月',
# 7: '7月',
# 8: '8月',
# 9: '9月',
# 10: '10月',
# 11: '11月',
# 12: '12月',
# }
data2 = pd.pivot_table(data, index=['事业部','办事处部门'], values='合同金额', columns=columstype_data,
aggfunc=sum).fillna(0) # ,'办事处部门',fill_value='无',合计字段 , margins=True, margins_name='Total'
# -------数值千分位格式化
data2 = data2.applymap(format_thousands) #
# 获取dataframe的键名,并将它们作为列表返回
column_names = data2.columns.tolist()
rename_dict ={}
for i,num in enumerate(column_names):
rename_dict[num]=str(num)+str(columstype)
# print(column_names,rename_dict)
data2 =data2.rename(columns=rename_dict)
# 使用rename方法替换DataFrame中的key名称
# data2.rename(columns=rename_dict, inplace=True)
# print(data2)
# 将DataFrame转换为HTML
html = data2.to_html() #index=False
return render_template('test.html', table=html)
if __name__ == '__main__':
app.run(debug=True)
3.关注实现内容:
说明:
1)用df.columns.tolist()获取键列表
2)替换键名称: df.rename(columns=rename_dict)
其他请参考:
全栈式数据统计:Flask+Pandas按年,季度,月统计显示
对你有所帮助,请点个赞吧!