当前位置:首页>python>告别手动统计!用Python一键汇总Excel水果数量,小白也能轻松上手

告别手动统计!用Python一键汇总Excel水果数量,小白也能轻松上手

  • 2026-09-06 19:12:00
告别手动统计!用Python一键汇总Excel水果数量,小白也能轻松上手

      今天分享一个朋友让帮他实现下面功能的代码,需要按水果名汇总每个序号下的总数量,手动拆分、计算、汇总。一段超实用的Python代码,一键搞定这种复杂的Excel汇总需求,还能自动生成格式超美观的汇总报表!哪怕你是零基础编程小白,跟着步骤走也能直接用~

朋友的需求:

一、数据样式

(做题前,先理解一下这个需求中的excel)

原始 Excel 属于一种:

半结构化宽表数据

特点:

  1. 每行包含多组「名称 + 数量」

  2. 名称列可能:

    • 是单一名称(如:苹果)

    • 是多个“水果+数字”组合(如:橙子1 柠檬2)

  3. 最终目标:

    • 按“序号”分组

    • 将所有水果拆分

    • 汇总成标准结构化表格

二、小白也能会的使用步骤

步骤1:准备工作(安装必要工具)

首先确保你的电脑装了Python(不会装的话,搜“Python 安装教程”,跟着装就行),然后打开电脑的「命令提示符」(Windows)/「终端」(Mac),输入以下命令安装需要的库:

pip install pandas openpyxl

等待安装完成即可,不用管中间的提示,没报错就是装好了。

步骤2:准备源Excel文件

把你的汇总源文件命名为data0227.xlsx,和接下来要保存的代码文件放在同一个文件夹里(比如桌面新建一个“水果汇总”文件夹),确保Excel里的列名是「序号」「名称 1」「数量 1」「名称 2」「数量 2」「名称 3」「数量 3」(如果组数不是3,改代码里的GROUP_COUNT就行)。

步骤3:复制代码并运行

  1. 在文件夹里右键→新建→文本文档,重命名为水果汇总.py(后缀要从.txt改成.py,看不到后缀就先在电脑设置里显示扩展名);
  2. 双击打开这个.py文件,把下面的完整代码复制粘贴进去,保存并关闭;
  3. 回到文件夹,双击水果汇总.py,等待几秒,文件夹里会自动生成汇总结果.xlsx,就是我们要的汇总表!

三、完整代码(直接复制用)

import pandas as pdimport refrom openpyxl import Workbookfrom openpyxl.styles import Font, PatternFill, Alignment, Border, Sidefrom collections import defaultdictdf = pd.read_excel('data0215.xlsx')# ── 解析函数 ────────────────────────────────────────────────────def parse_name_qty(name_str, total_qty):    """    解析名称字符串和总数量,返回 {水果名: 数量} 字典。    - 单名称(如 '苹果')→ 全部数量归该名称    - 多名称(如 '橙子1 柠檬2')→ 按比例分配    """    name_str = str(name_str).strip()    # 匹配 "汉字+数字" 对    pairs = re.findall(r'([\u4e00-\u9fa5]+)(\d+)', name_str)    if not pairs:        # 纯名称,无内嵌比例数字        return {name_str: total_qty}    total_ratio = sum(int(r) for _, r in pairs)    result = {}    for name, ratio in pairs:        result[name] = total_qty * int(ratio) / total_ratio    return result# ── 汇总逻辑 ─────────────────────────────────────────────────────GROUP_COUNT = 3  # 名称/数量列的组数records = []for _, row in df.iterrows():    seq = row['序号']    totals = defaultdict(float)    for i in range(1, GROUP_COUNT + 1):        name_col = f'名称 {i}'        qty_col  = f'数量 {i}'        if name_col not in row or pd.isna(row[name_col]):            continue        dist = parse_name_qty(row[name_col], row[qty_col])        for fruit, qty in dist.items():            totals[fruit] += qty    record = {'序号': seq}    record.update(totals)    records.append(record)result_df = pd.DataFrame(records).fillna('')# 固定列顺序(按题意)fruits = ['苹果', '橙子', '柠檬', '香蕉']cols = ['序号'] + [f for f in fruits if f in result_df.columns]result_df = result_df[cols]# 整数化(有值的格子)for col in fruits:    if col in result_df.columns:        result_df[col] = result_df[col].apply(lambda x: int(x) if x != '' else '')print("汇总结果:")print(result_df.to_string(index=False))# ── 输出到 Excel ─────────────────────────────────────────────────out_path = '汇总结果.xlsx'wb = Workbook()ws = wb.activews.title = '汇总'header_fill = PatternFill('solid', start_color='4472C4')header_font = Font(bold=True, color='FFFFFF', name='Arial')cell_font   = Font(name='Arial', size=11)center      = Alignment(horizontal='center', vertical='center')thin        = Side(style='thin', color='BFBFBF')border      = Border(left=thin, right=thin, top=thin, bottom=thin)# 写表头for col_idx, col_name in enumerate(result_df.columns, 1):    cell = ws.cell(row=1, column=col_idx, value=col_name)    cell.fill   = header_fill    cell.font   = header_font    cell.alignment = center    cell.border = border# 写数据alt_fill = PatternFill('solid', start_color='EBF3FB')for row_idx, row in enumerate(result_df.itertuples(index=False), 2):    fill = alt_fill if row_idx % 2 == 0 else PatternFill()    for col_idx, value in enumerate(row, 1):        cell = ws.cell(row=row_idx, column=col_idx, value=value if value != '' else None)        cell.font      = cell_font        cell.alignment = center        cell.border    = border        cell.fill      = fill# 列宽ws.column_dimensions['A'].width = 8for col_letter in ['B', 'C', 'D', 'E']:    ws.column_dimensions[col_letter].width = 10ws.row_dimensions[1].height = 20wb.save(out_path)print(f"\n已保存至:{out_path}")

四、小白能看懂的核心解析

不用懂全部代码,只要知道这几个关键地方能改,就能适配你的需求:

  1. 修改组数:代码里GROUP_COUNT = 3,如果你的Excel里有4组「名称+数量」,就改成4;
  2. 修改水果列表:fruits = ['苹果', '橙子', '柠檬', '香蕉'],换成你要汇总的水果/物品名;
  3. 修改源文件名:df = pd.read_excel('data0215.xlsx'),改成你的源Excel文件名;
  4. 修改样式:比如表头颜色start_color='4472C4'(蓝色),可以换成其他颜色代码(比如红色FF0000)。

五、常见问题解决

  1. 运行报错“找不到文件”:检查源Excel文件名是否和代码里的一致,且和代码文件在同一个文件夹;
  2. 报错“没有pandas”:重新执行pip install pandas openpyxl,确保网络正常;
  3. 数量汇总不对:检查源Excel里的列名是不是「名称 1」「数量 1」(注意空格),名称里的比例格式是不是“水果+数字”(比如“橙子1”不是“橙子 1”)。

以后遇到类似的Excel汇总需求,再也不用手动算啦!把重复的工作交给Python,省时又准确~

🔮 获取和交流

需要本章或其他文章的源码和数据的同学,关注+三连,评论“6666“,加下面微信,发你!也可以拉你进群交流学习,加群备注:IT小本本学习

为了能随时获取最新动态,大家可以动动小手将公众号添加到“星标⭐”哦,点赞 + 关注,用时不迷路!!!!

关注公众号:IT小本本 👇

用时不迷路!!

最新文章

随机文章