ChatGPT处理Excel表格实战:从数据清洗到自动化报告生成

1次阅读
没有评论

共计 2684 个字符,预计需要花费 7 分钟才能阅读完成。

image.webp

真实业务场景:电商订单处理的痛点

最近接手了一个电商平台的订单分析需求,需要从导出的 Excel 报表中统计各品类销售额、退货原因分类以及客户评价情感分析。原始数据长这样:

ChatGPT 处理 Excel 表格实战:从数据清洗到自动化报告生成

  • 商品名称列包含「【爆款】」等营销文案
  • 客户评价是自由文本,夹杂着表情符号和错别字
  • 退货原因写着「不想要 / 尺寸不对」等混合内容

手动处理时:

  1. 用 Excel 公式提取品类关键词经常漏判
  2. 分类退货原因要逐个阅读 2000+ 条记录
  3. VBA 处理中文文本时编码总出问题

传统方案 vs ChatGPT 方案对比

Pandas 方案短板:

  • 正则表达式处理「颜色:红色;尺码:XL」这类文本时规则复杂
  • 中文分词需要维护敏感词库和同义词表
  • 无法理解「用着还行但物流慢」这类复合情感

ChatGPT 优势体现:

  • 零样本学习:无需训练就能理解「买给妈妈的她很开心」的情感倾向
  • 上下文理解:自动将「XL 号太大」归类到「尺寸问题」
  • 多任务处理:一次 API 调用可同时完成分类和摘要

三阶段实战演示

阶段一:读取 Excel 数据

安装依赖:

pip install openai python-pptx python-dotx

核心读取代码(含异常处理):

import pandas as pd
from loguru import logger

def load_excel(file_path):
    try:
        df = pd.read_excel(file_path, engine='openpyxl')
        logger.success(f'成功加载文件,共 {len(df)} 条数据')
        return df
    except Exception as e:
        logger.error(f'文件读取失败:{str(e)}')
        raise

阶段二:设计高效 Prompt 模板

关键设计原则:

  • 明确输出格式:要求返回 JSON 方便后续处理
  • 限制输出长度:添加「用 3 个以内关键词总结」等约束
  • 示例引导:给出 1 - 2 个范例响应

订单分类 prompt 示例:

prompt_template = """
请对以下电商订单信息进行处理:1. 从商品名称提取品类(服装 / 食品 / 数码)2. 将退货原因归类到:尺寸问题 / 质量问题 / 其他
3. 用 1 - 3 个关键词总结客户评价情感

示例输入:商品名称:【热卖】男士纯棉 T 恤 XL
退货原因:衣服有破洞
客户评价:质量差,洗了一次就开线了

示例输出:{"品类": "服装", "退货原因": "质量问题", "评价关键词": ["差评", "质量差"]}

请处理:{input_text}
"""

阶段三:结构化写回 Excel

API 调用核心代码:

import openai
import json
from tenacity import retry, stop_after_attempt

@retry(stop=stop_after_attempt(3))
def call_chatgpt(text):
    response = openai.ChatCompletion.create(
        model="gpt-3.5-turbo-0613",
        messages=[{"role": "user", "content": prompt_template.format(input_text=text)}],
        temperature=0.3  # 降低随机性
    )
    return json.loads(response.choices[0].message.content)

# 写回 DataFrame
for idx, row in df.iterrows():
    result = call_chatgpt(row['原始文本'])
    df.at[idx, '品类'] = result.get('品类', '')
    df.at[idx, '退货分类'] = result.get('退货原因', '')

生产环境注意事项

API 调用控制

  • 使用 time.sleep(1.2) 避免每分钟超过 20 次的限流
  • 异步批处理:
    import asyncio
    async def batch_process(texts):
        semaphore = asyncio.Semaphore(5)  # 并发控制
        async with semaphore:
            return await asyncio.gather(*[process_single(text) for text in texts])

数据脱敏方案

  • 正则替换手机号:re.sub(r'1[3-9]\d{9}', '<PHONE>', text)
  • 邮箱替换:.replace('@', '[at]')

错误重试机制

from tenacity import retry, wait_exponential

@retry(wait=wait_exponential(multiplier=1, min=4, max=10))
def safe_api_call(text):
    try:
        return call_chatgpt(text)
    except openai.error.RateLimitError:
        logger.warning('触发限流,自动重试')
        raise

性能优化实战

添加监控装饰器:

import time
from functools import wraps

def log_time(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        logger.info(f'{func.__name__}耗时:{time.time()-start:.2f}s')
        return result
    return wrapper

实测对比:

处理方式 1000 条数据耗时
人工处理 6.5 小时
纯 Pandas 42 分钟
ChatGPT 方案 8 分钟(含 API 调用)

开放性问题思考

  1. 多表格关联:用 LangChain 的 MultiRetriever 可以连接商品信息表 + 订单表 + 用户画像表,但要注意:
  2. 表格间关联字段的模糊匹配问题
  3. token 超限时的分块处理策略

  4. GB 级文件处理 建议架构:

  5. 先用 PySpark 分割原始文件
  6. 对每个分片启动独立的处理 Pod
  7. 最终用 Redshift 等数据仓库合并结果

踩坑经验分享

  • 中文标点符号会占用更多 token,建议在 prompt 开头声明「请用英文标点回答」
  • gpt-3.5-turbo 对数字敏感度较低,遇到「降价 30%」这类信息建议先用正则提取
  • 当遇到「我不知道」这类拒绝回答时,在 prompt 中添加「如果无法确定请返回‘未知’」

完整代码已上传 Github(伪链接):github.com/example/excel-gpt-helper

下次我会尝试结合 Stable Diffusion,把分析结果自动生成可视化报告,有兴趣的读者可以关注后续更新。

正文完
 0
评论(没有评论)