Python自动化小技巧24——实现自动化输出模板表格报告

news2024/12/27 0:13:55

背景

很多人拿到数据excel文件,然后要写报告,做表格,要各种计算,各种排序,分组聚合,数据透视,然后合并单元格,添加边框,加粗,添加显示规则,添加数据条......然后变成固定格式的表格,复制到word里面或者直接发给领导看。 一样的工作每天或者每月都做的话,重复性的劳动真的很没有意义....

为什么不用Python进行自动化呢,单元格的颜色填充都可以模板化,自定义化。 代码开发完后,以后拿到数据只需双击运行一下代码,就可以模板化输出自己的报告啦

什么?不会写代码...在AI如此发达的今天,不会就问,就学倍。

本次就全场使用gpt编程,来给大家演示怎么对自己的数据进行一个模板化的报告输出。

所有过程都可以使用自然语言和gpt对话完成,让他来写代码,不会编程一样能做出属于自己的自动化程序。


代码实现(提示词实现)

不需要你写代码,你需要和gpt提需求就好了。

我们从头开始,

生成/读取数据

首先我要分析我需要数据,我懒得找数据了....就直接让gpt帮我生成一个数据:

帮我生成一个pandas数据框,要有4列,第一列时间(按月统计),第二列地区,第三列产品名称,第四列销售量。 时间就从2023-11到2024-10。地区就北上广深杭州南京6个城市,产品名称就是产品ABC3众,销售量你numpy正态分布随机来吧

然后gpt就吭哧吭哧的写出代码,你放入python中运行:

import pandas as pd
import numpy as np

# 定义时间范围
date_range = pd.date_range(start='2023-11-01', end='2024-10-31', freq='M').strftime('%Y-%m')

# 定义地区和产品名称
regions = ['北京', '上海', '广州', '深圳', '杭州', '南京']
products = ['产品A', '产品B', '产品C']

# 创建数据框架
data = {
    '时间': np.repeat(date_range, len(regions) * len(products)),
    '地区': np.tile(np.repeat(regions, len(products)), len(date_range)),
    '产品名称': np.tile(products, len(date_range) * len(regions)),
    '销售量': np.random.normal(loc=500, scale=100, size=len(date_range) * len(regions) * len(products)).astype(int)
}

df = pd.DataFrame(data)

# 确保销售量非负
df['销售量'] = df['销售量'].apply(lambda x: max(x, 0))
df.shape
df

挺好,就是自己想要的样子。

如果你是本地excel数据要读取,那就问gpt,怎么用pandas读取本地文件就好了。你告诉它你数据张什么样,要如何读取......用它写的代码就能读取进来,和我上面生成的这个是一样的。很简单。


分组聚合计算统计量

我们要统计不同地方不同商品的销售量变化,那我就开始问gpt了:

好,现在帮我进行统计,我要输出一个多层索引的表。 首先可以计算一个环比,每个地区每个产品比上个月的销售量环比增加了多少。 然后进行数据的变形,行是不同的时间,列是多层索引,第一层是不同的地区,第二层是不同的商品,取值就是销售量的环比

然后它就会写出代码:

df.sort_values(by='时间', inplace=True)
# 计算环比变化
df['环比'] = df.groupby(['地区', '产品名称'])['销售量'].pct_change()
# 将数据变形为所需的多层索引格式
pivot_table = df.pivot_table(index='时间',  columns=['地区', '产品名称'], values='环比')
pivot_table

就这么短短几行代码就行了,不比excel方便??


格式化模板样式输出

我们继续,按照自己想要的样式来保存这个Excel表。

一般人做表可能就是添加一下突出单元格规则显示,单元格颜色填充,表头加粗什么的。但是我这里为了演示啥样式python都能实现,也为了考验gpt的理解能力,我就进行了各自花里胡哨的样式添加,什么颜色,填充,字体,下划线,边框,数据条,全部都改一下,所以我的提示词如下:

好,我现在要进行储存,但我想用openxl库进行格式的调整。

1.把pivot_table表头第一层索引使用蓝色填充,字体加大加粗,转为白色,第二层索引使用浅蓝色填充。

2.对产品c的列添加渐变色的数据条,条件格式里面的的数据条。

3.对产品a里面取值大于0.3的单元格浅红色填充,小于0.2的用浅绿色填充。

4.产品b里面大于0.3的单元格的字体加粗,斜线,转为橙色字体,小于0的单元格,边框加满,字体加上下划线

然后gpt就会生成代码:

import pandas as pd
import numpy as np
from openpyxl import Workbook
from openpyxl.styles import PatternFill, Font, Border, Side
from openpyxl.formatting.rule import CellIsRule, ColorScaleRule, DataBarRule
from openpyxl.drawing.image import Image

file_name = 'styled_pivot_table.xlsx'
pivot_table.to_excel(file_name, engine='openpyxl')

# 打开生成的 Excel 文件进行格式化
wb = load_workbook(file_name)
ws = wb.active

# 定义格式
header_fill1 = PatternFill(start_color='0000FF', end_color='0000FF', fill_type='solid')  # 蓝色
header_fill2 = PatternFill(start_color='ADD8E6', end_color='ADD8E6', fill_type='solid')  # 浅蓝
font_header1 = Font(size=12, bold=True, color='FFFFFF')  # 白色字体

# 应用样式到第一层和第二层表头
for cell in ws[1]:  # 第一行是第一层表头
    cell.fill = header_fill1
    cell.font = font_header1

for cell in ws[2]:  # 第二行是第二层表头
    cell.fill = header_fill2

# 条件格式化
# 为产品C添加数据条
for col in ws.iter_cols(min_row=2, min_col=3, max_col=ws.max_column):
    col_header_value = col[0].value
    if col_header_value and '产品C' in col_header_value:
        col_letter = col[0].column_letter
        ws.conditional_formatting.add(f'{col_letter}3:{col_letter}{ws.max_row}',
                                      DataBarRule(start_type='num', start_value=0,
                                                  end_type='num', end_value=1,
                                                  color='FF638EC6', showValue="None"))

# 为产品A添加特定条件的单元格格式
for col in ws.iter_cols(min_row=2, min_col=1, max_col=ws.max_column):
    col_header_value = col[0].value
    if col_header_value and '产品A' in col_header_value:
        col_letter = col[0].column_letter
        # 大于0.3的单元格浅红色填充
        ws.conditional_formatting.add(f'{col_letter}3:{col_letter}{ws.max_row}',
                                      CellIsRule(operator='greaterThan', formula=['0.3'],
                                                 fill=PatternFill(start_color='FFC7CE', end_color='FFC7CE', fill_type='solid')))
        # 小于0.2的单元格浅绿色填充
        ws.conditional_formatting.add(f'{col_letter}3:{col_letter}{ws.max_row}',
                                      CellIsRule(operator='lessThan', formula=['0.2'],
                                                 fill=PatternFill(start_color='C6EFCE', end_color='C6EFCE', fill_type='solid')))

    # 为产品B的特定格式
bold_italic_orange_font = Font(bold=True, italic=True, color='FFA500')  # 橙色, 加粗, 斜体
underline_font = Font(underline='single')  # 下划线
border_style = Side(border_style='thin', color='000000')
full_border = Border(left=border_style, right=border_style, top=border_style, bottom=border_style)

for col in ws.iter_cols(min_row=2, min_col=1, max_col=ws.max_column):
    col_header_value = col[0].value
    if col_header_value and '产品B' in col_header_value:
        col_letter = col[0].column_letter
        # 大于0.3的字体加粗斜体橙色
        ws.conditional_formatting.add(f'{col_letter}3:{col_letter}{ws.max_row}',
                                      CellIsRule(operator='greaterThan', formula=['0.3'],
                                                 font=bold_italic_orange_font))
        # 小于0的单元格加边框和下划线
        ws.conditional_formatting.add(f'{col_letter}3:{col_letter}{ws.max_row}',
                                      CellIsRule(operator='lessThan', formula=['0'],
                                                 font=underline_font,
                                                 border=full_border))

# 保存工作簿
wb.save(file_name)

这样,它就把结果表生成好了,我们打开看看效果:

 

很不错!!!,基本都是按照我的要求来的,美中不足的是产品A我指定的是小于0.2填充为浅绿色,但是它空白的位置也填充为浅绿色了,,,不过无伤大雅。

当然实际工作的表格不可能这么花里胡哨......我只是为了演示 “颜色,填充,字体,下划线,边框,数据条”这些都可以用python调整。并且GPT都能理解,都能写出来,很方便的。

你只需要用自然语言表述出你的需求,然后它写代码,你运行就好了,很简单的。

(当然,也不是完全没门槛,据我观察,很多人是写不出自己的明确需求的.....就我这提示词,他们都写不出来,并且他们很多没有数据思维,可能自己都不知道自己想要的是什么,更别说清楚的表述出来让AI理解了。并且AI也不一定一次都写的对,需要你自己和他反复对话反复调整。但是很多人没这个耐心和能力,觉得AI写的东西不是自己想要的就说它垃圾.....再也不用了....我只能说这种人没有任何自学思维...活该工作效率低)


以前的文章可以参考

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C# 通俗易懂的介绍基础知识(七)——栈Stack(从日常生活开始讲解)

目录 一、前言 二、栈是排列方式 三、栈的单词 四、程序中的栈 五、栈的方法 1.声明并初始化栈 2.往栈里放东西(学名:入栈) 3.从栈往外拿东西 (学名:出栈) 4.清空栈 5.遍历 Stack 6.获取Stack的长…

Vue全栈开发旅游网项目(10)-用户管理后端接口开发

1.异步用户登录\登出接口开发 1.设计公共响应数据类型 文件地址:utils/response404.py from django.http import JsonResponseclass BadRequestJsonResponse(JsonResponse):status_code 400def __init__(self, err_list, *args, **kwargs):data {"error_c…

PostgreSQL中如果有Left Join的时候索引怎么加

在PostgreSQL中,当你的查询包含多个LEFT JOIN和WHERE条件时,合理地添加索引可以显著提高查询性能。以下是一些具体的优化步骤和建议: 1. 分析查询 使用 EXPLAIN ANALYZE 命令分析你的查询,了解查询的执行计划,识别出连…

A027-基于Spring Boot的农事管理系统

🙊作者简介:在校研究生,拥有计算机专业的研究生开发团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹 赠送计算机毕业设计600…

Vue的基础使用

一、为什么要学习Vue 1.前端必备技能 2.岗位多,绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能(Vue2Vue3) 二、什么是Vue 概念:Vue (读音 /vjuː/,类似于 view) 是一套 构建用户界面 的 渐进式 框架…

Innovus Flexible H-tree and Multi-tap Clock Flow Lab实操系列教程(Day1)

我们都知道时钟树综合在数字IC后端实现中的重要性。做clock tree主要有传统clock tree做法,H tree,Flexible H-tree,fishbone等做法。接下去小编将拿cadence官方的这份Innovus Flexible H-tree and Multi-Tap Clock Flow和对应的lab data来做…

【MySQL】MySQL数据库安装以及报错处理技巧

前言: 本节内容讲述在Ubuntu环境下怎么进行MySQL的安装。 以及一些安装过程中遇到的报错如何处理的问题。 ps:注意, 本篇文章不是图形化界面的MySQL安装教程哦。想要安装图形化界面的MySQL的友友们可以另寻资源了。 目录 更新软件包列表 安装M…

ISP——你可以从这里起步(二)

接上一篇,上一篇是原理篇,这一篇是实战篇,为了实现下面框图中的不完美ISP。 第一章 做一张RAW图自己用 不是所有的人都能获得raw图,即使获得了raw图也需要对应的sensor参数才能把它用起来,所以我找了一条野路子可以把…

CTF攻防世界小白刷题自学笔记14

fileclude,难度:1,方向:Web 题目来源:CTF 题目描述:好多file呀! 给一下题目链接:攻防世界Web方向新手模式第17题。 打开一看,这熟悉的味道,跟上一篇文章基本一摸一样的&#xff…

CTFHub每日练习

文章目录 技能树CTF Web信息泄露目录遍历PHPINFO备份文件下载网站源码bak文件vim缓存.DS_Store Git泄露Logstash index方法一方法二 密码口令弱口令 技能树 CTF Web 信息泄露 目录遍历 PHPINFO 备份文件下载 网站源码 当开发人员在线上环境中对源代码进行了备份操作&#x…

使用CNN进行验证码识别:深度学习与图像预处理教程

验证码(CAPTCHA)广泛用于区分人类和自动化程序(如机器人),通常由扭曲的字母、数字或符号组成。为了实现验证码的自动识别,深度学习尤其是卷积神经网络(CNN)非常有效。本文将带你一起…

Springboot采用jasypt加密配置

目录 前言 一、Jasypt简介 二、运用场景 三、整合Jasypt 2.1.环境配置 2.2.添加依赖 2.3.添加Jasypt配置 2.4.编写加/解密工具类 2.5.自定义加密属性前缀和后缀 2.6.防止密码泄露措施 2.61.自定义加密器 2.6.2通过环境变量指定加密盐值 总结 前言 在以往的多数项目中&#xff0…

讯飞、阿里云、腾讯云:Android 语音合成服务对比选择

在 移动端 接入语音合成方面,讯飞和腾讯云等都是优秀的选择,但各有其特点和优势。咱们的需求是需要支持普通话/英语/法语三种语言,以下是对各个平台的详细比较: 一、讯飞语音合成介绍 与语音听写相反,语音合成是将一段…

python爬虫获得店铺的所有商品

在编写Python爬虫以获取店铺的所有商品信息时,通常涉及到发送HTTP请求、解析响应内容以及处理API返回的数据。以下是一个详细的Python爬虫示例,用于获取店铺的商品信息。这个示例假设API返回的是JSON格式的数据,并且需要API密钥进行认证。 步…

java程序打包及执行 jar命令及运行jar文件

java程序打包及执行 jar命令及运行jar文件 打包命令: 安装完成jdk之后采用 jar命令进行打包 jar -cvfe ddd.jar -C bin/ddd.java 打包 ddd.java 文件 jar -cvfe dddd.jar -C . 注意 -C 后面的点. 表示当前目录下所有 如图: 运行jar 文件 java -class…

计算机视觉空域处理完整版——超详细图文解

空域处理 图像空域处理 a.线性滤波b.非线性滤波c.二值图像处理方法 数学形态学连通成分标记 “点运算”是在不改变图像大小、几何形状以及局部结构的情况下,对像素值进行修改,新图像的像素值只与 原图像同一位置的像素值有关。 灰度级变换(线性变换,非…

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable

【HarmonyOS】Hdc server port XXXX has been used.Configure environment variable 一、 问题背景: 无法调试debug应用,IDE右下角显示该弹窗: Hdc server port XXXX has been used.Configure environment variable ‘OHOS_HDC_SERVER_POR…

立体工业相机提升工业自动化中的立体深度感知

深度感知对仓库机器人应用至关重要,尤其是在自主导航、物品拾取与放置、库存管理等方面。 通过将深度感知与各种类型的3D数据(如体积数据、点云、纹理等)相结合,仓库机器人可以在错综复杂环境中实现自主导航,物品检测…

深度解析:Android APP集成与拉起微信小程序开发全攻略

目录 一、背景以及功能介绍 二、Android开发示例 2.1 下载 SDK 2.2 调用接口 2.3 获取小程序原始Id 2.4 报错提示:bad_param 2.4.1 错误日志 2.4.2 解决方案 相关推荐 一、背景以及功能介绍 需求:产品经理需要APP跳转到公司的小程序(最好指定页…

stream学习

Stream流 定义 Steam流&#xff0c;用于操作集合或者数组中的数据&#xff0c;大量结合了Lamda表达式的语法风格&#xff0c;代码简洁。 重点&#xff1a; 流只能收集一次 ​ 获取Stream流 Stream流要与数据源建立连接。 1.list ​ 直接调用steam()即可 // list List<Stri…