全栈式数据统计:Flask+Pandas 怎样替换键名称

话不多说,有图有源码:

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按年,季度,月统计显示

对你有所帮助,请点个赞吧!

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,下面是一个示例代码,其中使用了 FlaskPandas 和 Python 的 zipfile 库,同时使用了 Vue 作为前端框架。 Flask 后端代码: ```python from flask import Flask, Response import pandas as pd import zipfile import io app = Flask(__name__) @app.route('/download') def download(): # 生成数据 df1 = pd.DataFrame({'a': [1, 2, 3], 'b': [4, 5, 6]}) df2 = pd.DataFrame({'c': [7, 8, 9], 'd': [10, 11, 12]}) # 存储数据到 CSV 文件 df1.to_csv('data1.csv', index=False) df2.to_csv('data2.csv', index=False) # 打包 CSV 文件到 Zip 文件 buffer = io.BytesIO() with zipfile.ZipFile(buffer, 'w') as zip: zip.write('data1.csv') zip.write('data2.csv') # 返回 Zip 文件 buffer.seek(0) return Response(buffer, mimetype='application/zip', headers={ 'Content-Disposition': 'attachment;filename=data.zip' }) ``` Vue 前端页面代码: ```html <template> <div> <button @click="download">Download</button> </div> </template> <script> export default { methods: { download() { const url = '/download' const filename = 'data.zip' fetch(url).then(response => { response.blob().then(blob => { const link = document.createElement('a') link.href = window.URL.createObjectURL(blob) link.download = filename link.click() window.URL.revokeObjectURL(link.href) }) }) } } } </script> ``` 这个示例代码中,我们使用了 Flask 的路由 `/download` 来处理下载请求。在这个路由中,我们使用 Pandas 生成了两个 DataFrame,然后分别存储到了两个 CSV 文件中。接着,我们使用 Python 的 zipfile 库将这两个 CSV 文件打包成一个 Zip 文件,并将这个 Zip 文件返回给了前端。 在前端页面中,我们使用了一个按钮来触发下载事件。在下载事件中,我们使用了 fetch 函数来获取下载链接,然后使用 Blob 对象将返回的数据转换成二进制数据,并使用 URL.createObjectURL 函数生成一个下载链接。最后,我们创建一个 `<a>` 标签,设置这个标签的 href 属性为下载链接,设置 download 属性为文件名,然后触发这个标签的点击事件来下载文件。 希望这个示例能够帮助到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿桂天山

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值