ChatGPT辅助处理excel表格数据

article/2024/9/7 19:14:06

选择使用方法

  1. 找现成的工具。试了两个,有各种问题。比如比如北大团队出品的ChatExcel等。我的表格列比较多,上传文件后需要砍掉一部分。输入几个命令以后就识别不了了。即使识别到了,输出也受限制,还不如手工处理。另外,我的表格涉及部分财务数据,考虑安全性问题,也不太方便上传到网站。
  2. vba写脚本。我使用的是wps而不是office,默认不支持vba,需要买商业版。遂弃之。
  3. 在对python语法不太熟悉的情况下初步尝试使用ChatGPT3.5(免费版)写python代码,把代码拷贝到visual studio code 中运行。在ChatGPT的帮助下,安装了几个必备的库。但是几轮prompt下来,代码运行还是出现了一些问题。刚开始没有耐心去调试,转而尝试new bing,看下new bing的代码能力。new bing给出的代码如下:
# 读取Excel文件
df = pd.read_excel('未完工项目收款任务记录表.xlsx', sheet_name='物流项目汇总表')# 删除符合条件的数据
df = df.drop(df[(df['总收款额'] == df['总合同结算金额']) & (df['总收款额'].isnull()) & (df['总合同结算金额'].isnull())].index)
df = df.drop(df[(df['总收款额'] == df['总合同结算金额']) & (df['总收款额'].notnull()) & (df['总合同结算金额'].notnull())].index)
df = df.drop(df[(df['项目编号'].isnull()) & (df['PO单号'].isnull())].index)# 新建一个sheet并保存
now = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
writer = pd.ExcelWriter('未完工项目收款任务记录表.xlsx')
df.to_excel(writer, sheet_name='物流项目汇总表' + now, index=False)
writer.save()

好家伙。这个牛。直接把我文档全部清空了。。。

  1. GitHub Copilot 据说是GPT4好用一点,但Mastercard支付被拒(最后在账户中直接增加payment ,在Copilot中选择支付方式,成功开通了Copilot )刚开始还不太会使用,以为就是更加智能的auto completion。后来发现,把注释写完,可以自动出一段代码。Copilot 适合的场景是需求细化到粒度比较小的代码级别。而ChatGPT的prompt,可以是详细的业务级别。

利用python处理excel表格

prompt编写经验

prompt编写的一些原则

prompt 简单的理解它是给 AI 模型的指令。它可以是一个问题、一段文字描述,甚至可以是带有一堆参数的文字描述。AI 模型会基于 prompt 所提供的信息,生成对应的文本,亦或者图片。而 Prompt Engineering (中文意思为提示工程,后缩写为 PE)则是:Prompt Engineering 是一种人工智能(AI)技术,它通过设计和改进 AI 的 prompt 来提高 AI 的表现。Prompt Engineering 的目标是创建高度有效和可控的 AI 系统,使其能够准确、可靠地执行特定任务。因为人类的语言从根本上说是不精确的,目前机器还没法很好地理解人类说的话,所以才会出现 PE 这个技术。另外,受制于目前大语言模型 AI 的实现原理,部分逻辑运算问题,需要额外对 AI 进行提示。

我的prompt进化之路

  • 第一版:
    有一张excel表格,包括2个sheet,请帮我写一段vba代码,删除符合以下条件的记录(行)
  1. 如果某一行的M列的值,等于100%,并且这一行以下的若干行M列为空,删除这一行及以下M列为空的若干行。
  2. 如果某一行的M列的值,等于100%,并且这一行的下一行的M列不为空,直接删除这一行。
  3. 如果某一行的M列的值,小于100%,并且这一行以下的若干行的M列为空,保留这一行及以下M列为空的若干行。
  4. 如果某一行的M列的值,小于100%,并且这一行的下一行M列不为空,保留这一行。
    经过以上调整后,输出为一个新的sheet,命名为:原sheet名称-1
  • 最终版:
    有一张excel表格,未完工项目收款任务记录表.xlsx,其中有一个sheet名称是物流项目汇总表,物流项目汇总表中包括了两个列:“总收款额”与“总合同结算金额”。它们的数据类型是货币。“总收款额”在第10列,“总合同结算金额”在第11列。还包括2个列:“项目编号”与“PO单号”。“项目编号”在第6列,“PO单号”在第7列。另一个sheet名称是物流项目收款信息表,物流项目汇总表中包括了两个列:“总收款额”与“总合同结算金额”。它们的数据类型是货币。“总收款额”在第10列,“总合同结算金额”在第11列。还包括2个列:“项目编号”与“PO单号”。“项目编号”在第6列,“PO单号”在第7列。
    这两张sheet分别需要删除一些数据,被删除的数据满足以下要求:1. 先删除“项目编号”列为空而且“PO单号”为空的行。2. 如果“总收款额”列的值与“总合同结算金额”列的值差值小于1,而且,该行后面的若干行的“总收款额”列为空,“总合同结算金额”列为空,删除这一行及后面若干行。3. 如果“总收款额”列的值与“总合同结算金额”列的值差值小于1,而且,该行后面的一行的“总收款额”列不为空,“总合同结算金额”列不为空,仅删除这一行。
    两张sheet分别删除符合条件的数据后,其他数据保持格式不变,另存为一个excel文件,文件名称是:原文件名称+日期时间,该文件中包括两个sheet,名称分别是物流项目汇总表与物流项目收款信息表。
    请给出完整的python代码
    对比两个版本的prompt:
    1. 交互过程中,也对需求有了更完善的理解。增加了预处理这一步。鉴于我的表格,每一行的数据格式并不一致,而删除并不规范的干扰数据,处理起来更加简洁,对结果也没有任何影响。
    2. 在业务需求的描述方面,增加了很多表格的细节。比如需要处理的单元格数据类型,目标数据的列号。
    3. 其他调整:比如合同结算额与收款额,差值小于某个数值(¥1)比等于更符合实际情况。

代码调试

百分比数据单元格的处理

  1. 第一版的代码
# 读取指定的sheet
df = pd.read_excel(file_name, sheet_name=sheet_name)
new_data = []  # 存储符合条件的行
i = 0  # 当前行索引
while i < len(df):current_percentage = df.loc[i, 'M']next_percentage = df.loc[i+1, 'M'] if i < len(df)-1 else Noneif current_percentage == 1 and pd.isna(next_percentage):  # 条件1while pd.isna(df.loc[i+1, 'M']):

打印输出df.loc[i, ‘M’]的值不对。来回修改几次,还是出错:
在这里插入图片描述
这个问题没有得到很好的解决。我调整了一下,改为比较2个货币类型的单元格数据大小。

for ws in [ws_summary, ws_payment]:rows_to_delete = []  # 存储需要删除的行号print(f"ws: {ws.title}, max_row: {ws.max_row}")for row in range(2, ws.max_row+1):print("ws.cell(row={0}, column=10).value:".format(row), ws.cell(row=row, column=10).value)print("ws.cell(row={0}, column=11).value:".format(row), ws.cell(row=row, column=11).value)if ws.cell(row=row, column=10).value is not None and \ws.cell(row=row, column=11).value is not None and \abs(ws.cell(row=row, column=10).value - ws.cell(row=row, column=11).value) < 1: #收款金额和合同结算金额相等,一定会删除rows_to_delete.append(row)for i in range(1, po_number_max):  # 检查该行后面的若干行是否为空if ws.cell(row=row+i, column=10).value is None and ws.cell(row=row+i, column=11).value is None:             # 后面若干行要删除       rows_to_delete.append(row+i)else:                    break             

while死循环

有一个版本的代码,运行之后,vs code出现无响应,怀疑是出现了死循环。增加打印输出后,果然是这样。说明ChatGPT编写的代码,逻辑漏洞也是有的。
在这里插入图片描述
还比如:
在这里插入图片描述
有时候还有重复性错误:
在这里插入图片描述

excel公式的处理

  1. 单元格包含公式
    尝试了多个封装为函数的方案,将包含公式的单元格转换为数值。
def get_value(cell):if cell.data_type == 'f':compiler = ModelCompiler()new_model = compiler.read_and_parse_archive(filename)evaluator = Evaluator(new_model)value = evaluator.evaluate(cell)return valueelse:return cell.value

最后还是没成功,错误大多是库的问题
在这里插入图片描述
实际上,我的openpyxl是刚安装的。最后还是在网上查到了一个方案。直接读取单元格中的公式计算值。
2. 删除数据后公式的更新
经过处理后输出的sheet的数据是对了,但公式全没有了。数据之间的引用关系消失了。目前这个问题还在研究中。当然,如果出来的中间数据仅做分析使用,只要数据正确,无公式,也勉强可以接受。
增加图形图表方式的数据分析也是我下一步需要完成的工作。
以下代码其实是可以实现公式更新功能的。如果打开文件的方式是data_only=False的话

for ws in [ws_summary, ws_payment]:for row in ws.rows:for cell in row:if cell.data_type == 'f':cell.value = cell.value    

结论

  1. 虽然ChatGPT的帮助确实提高了代码编写的效率,但在整个过程中,我发现ChatGPT给出的一些代码会运行出错,这时需要具有调试Python代码的能力。另外,对于ChatGPT无法解决的问题,可以查阅其他资料进行解决。总之,在这个过程中,对代码的理解和调试能力是必不可少的。
  2. 看过ChatGPT4的介绍,看起来4的代码能力比3.5强,下一步期待解决4的付款问题,尝试一下进一步提高生产力。

参考

  1. Learning Prompt
  2. Python用openpyxl读取单元格中的公式或读取公式计算值

http://chatgpt.dhexx.cn/article/UpiGx8TK.shtml

相关文章

全新视角!带你一文读懂ChatGPT!

最了解你的人不是你的朋友&#xff0c;而是你的敌人。 ——《东邪西毒》 目录 什么是ChatGPT&#xff1f; ChatGPT为什么会突然爆红网络&#xff1f; ChatGPT能帮助我们做什么&#xff1f; 获取源码&#xff1f;私信&#xff1f;关注&#xff1f;点赞&#xff1f;收藏&…

AI提效工具|借助chatgpt快速读论文,快速总结、归纳、索引相似文章

目前新论文层出不穷&#xff0c;“快速阅读论文”成为研究者们一个必备能力。本文简单记录了近期出现的两个借助chatgpt来帮助我们快速读论文的“神器”&#xff0c;帮助大家快速上手应用&#xff0c;迅速提升论文阅读速度。 此外&#xff0c;本人也会定期更新记录一些类似的“…

Word+ChatGPT,一分钟完成周报总结作文

大家好&#xff0c;我是可夫小子&#xff0c;关注AIGC、读书和自媒体。解锁更多ChatGPT、AI绘画玩法。加&#xff1a;keeepdance&#xff0c;备注&#xff1a;chatgpt&#xff0c;拉你进群。 Office 的办公软件Word&#xff0c;是我们日常的文字工作的阵地。与ChatGPT的文字生成…

ChatDOC工具——使用ChatGPT高效阅读技术科研论文

ChatDOC是一款功能强大的人工智能阅读辅助工具&#xff0c;专为帮助用户快速理解论文内容而设计。使用ChatDOC&#xff0c;您可以通过上传PDF版论文文献&#xff0c;利用先进的ChatGPT技术&#xff0c;只需三个简单步骤&#xff0c;便可以高效地阅读论文&#xff0c;提高阅读效…

如何用 ChatGPT 帮你10分钟读完数据库论文

本周&#xff0c;OpenAI 向所有 ChatGPT Plus 用户开放了两个重要功能&#xff1a; Web Browsing 和 Plugins 它俩都需要用户自己开启&#xff0c;才能使用&#xff0c;如下&#xff1a; 作为对数据库论文的爱好者&#xff0c;我第一款挑选的 Plugin 便是 ChatWithPDF,毕竟真的…

ChatGPT实现代码解释

代码解释 新手程序员在入门之初&#xff0c;最好的学习路径就是直接阅读其他人的代码&#xff0c;从中学会别人是怎么写的&#xff0c;为什么这么写。过去&#xff0c;这个学习过程可能需要广泛阅读官方文档&#xff0c;在 GitHub issue 上提问&#xff0c;上 Stack Overflow …

chatPDF | 别再自己读文献了!让chatGPT来帮你读吧!~

1写在前面 自从chatGPT开放API以后&#xff0c;相关基于此的app也是层出不穷。&#x1f92a; ChatGPT API是基于OpenAI的自然语言处理模型的API。&#x1f9d0; 基于这个API&#xff0c;开发人员可以通过程序调用和使用ChatGPT模型来解决各种文本相关的任务。&#x1f609; 其实…

使用ChatGPT工具阅读文献的实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

chatGPT陪你读源码

概述 chatGPT从2022年11月份崭露头角以来&#xff0c;一直备受关注。他的人工智能对话颠覆了以往智能对话的刻板印象&#xff0c;跟chatGPT聊天&#xff0c;感觉就像百晓生一样&#xff0c;什么都懂。尤其在编程方面&#xff0c;chatGPT可以根据实际的业务场景需求&#xff0c…

用 ChatGPT 读 Vue3 源码,会怎么样?

前言 ChatGPT 最近十分火爆&#xff0c;今天我也来让 ChatGPT 帮我阅读一下 Vue3 的源代码。 都知道 Vue3 组件有一个 setup函数。那么它内部做了什么呢&#xff0c;今天跟随 ChatGPT 来一探究竟。 实战 setup 函数在什么位置呢&#xff0c;我们不知道他的实现函数名称&…

ChatGPT读PDF、生成思维导图的几种方案

大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、读书和自媒体。 日常办公&#xff0c;我们离不开pdf文档读取&#xff0c;思维导图制作&#xff0c;那么ChatGPT能够给我们什么帮助呢&#xff1f; 通常的方法是&#xff1a;我们…

chatgpt赋能python:Numpy读音:是“num-pie”还是“num-pee”?

Numpy读音&#xff1a;是“num-pie”还是“num-pee”&#xff1f; 你是否曾经在想&#xff0c;“numpy”这个词怎么念&#xff1f;很多人都有不同的看法。有些人说“num-pie”&#xff0c;而另一些人则说“num-pee”。那么&#xff0c;谁是正确的呢&#xff1f;在这篇文章中&a…

一文读懂ChatGPT(全文由ChatGPT撰写)

最近ChatGPT爆火&#xff0c;相信大家或多或少都听说过ChatGPT。到底ChatGPT是什么&#xff1f;有什么优缺点呢&#xff1f; 今天就由ChatGPT自己来给大家答疑解惑~ 全文文案来自ChatGPT&#xff01; 01 ChatGPT是什么 ChatGPT是一种基于人工智能技术的自然语言处理系统&…

【记录】ChatGPT使用记录

文章目录 2023年02月08日数学哲学Java其他 2023年02月09日ChatGPT网络 2023年02月10日算法组网 2023年02月11日ChatGPT&#xff08;优化目标&#xff09;DOS 2023年02月15日影评&#xff08;三体、流浪地球2&#xff09;Discord 2023年02月17日翻译 &#x1f525; 根据对话的日…

ChatGPT App 来了!

两个月前&#xff0c;在 ChatGPT 相继公开 API、带来「插件功能」之际&#xff0c;我们明显感知到了 GPT 正在以前所未有的速度成为人工智能时代的 Windows&#xff0c;AI 发展也正处于 iPhone 4 时刻。 当下&#xff0c;ChatGPT 的进度再下一城&#xff0c;其自身真正迎来了 …

ChatGPT大规模封锁亚洲地区账号

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 在毫无征兆的情况下&#xff0c;从3月31日开始OpenAI大规模封号&#xff0c;而且主要集中在亚洲地区&#xff0c;特别是ip地址在台湾、日本、香港三地的&#xff0c;命中率目测40%。新注册的账号、…

Chatgpt详细登录教程

一、准备“梯子” 梯子、科学上网、翻墙&#xff0c;三者是同一个意思。本店没相关科技产品和服务&#xff0c;请用户各显神通。 1. 确认IP 打开跳转入口&#xff0c;看下图 ​ 2.尝试登录 注意&#xff0c;第1点不是必需的&#xff0c;有些设备ip查询会延迟但当下依然能登…

ChatGPT知识库丨ChatGPT 登不上官网怎么办?

ChatGPT知识库丨公开 分享 进步 一站式GPT知识库 语雀秉持公开、分享和进步的理念&#xff0c;打造一站式ChatGPT知识库https://www.yuque.com/gptcn/gpt原文首发于语雀知识库文档 最近看见不少人说ChatGPT 登不上官网了&#xff0c;那怎么办&#xff1f; 首先&#xff0c;记…

ChatGPT为我做的账号介绍

以上是ChatGPT介绍 另外Captain目前在职与一家ToB家居售后行业&#xff0c;主要专注于家居家具类产品售后环节的数据产品建设和数据模型设计、指标看板设计、选品和售后类数据化解决方案。 回答&#xff1a; 大家好&#xff0c;我是Captain&#xff0c;一个CSDN博主&#xff…

如何修改ChatGPT账号密码?偷偷告诉你一个小技巧。请赶紧修改

文 / 韩彬&#xff08;微信公众号&#xff1a;量子论&#xff09; 说个现实问题&#xff0c;因为各种原因&#xff0c;不少朋友的ChatGPT是买的账号或代为注册的账号。 考虑安全问题&#xff0c;强烈建议修改初始密码。 然而&#xff0c;ChatGPT竟然没有提供修改密码的功能&…