Python一键搞定Excel数据自动分配

 更新时间:2025年10月21日 08:58:35   作者:IT小本本  
这篇文章主要为大家详细介绍了Python一键搞定Excel数据自动分配的相关方法,可以轻松实现水果分箱,文中的示例代码讲解详细,有需要的小伙伴可以了解下

做库存管理、生鲜分拣时,你是不是也遇到过这些麻烦?—— 手里有几十行水果总数数据,要按 “每箱最多 24 个、最多分 6 箱” 的规则分配,手动算不仅慢,还容易漏算余数、填错单元格。

今天分享一段 Python 代码,3 步完成 Excel 水果分箱,自动处理空值、覆盖旧列,新手也能直接用!

一、场景痛点:手动分箱的 3 个坑

假设你有这样一份 Excel 表(“水果分箱.xlsx”):

水果总数箱 1箱 2箱 3箱 4箱 5箱 6
32
130
77
124
117
20

要按规则分箱(每箱≤24 个,最多 6 箱),手动算会遇到:

  • 余数难处理:50 个苹果,24×2=48,剩 2 个,得手动补 1 箱(共 3 箱:24,24,2);
  • 空值易出错:橙子总数为空,手动可能填错成 0 或漏填;
  • 批量效率低:100 行数据要算 100 次,改规则(如每箱 20 个)又得重算。

而 Python 代码能自动解决这些问题,全程不用手动计算!

二、代码拆解:5 分钟看懂分箱逻辑

这段代码核心是 “读取 Excel→按规则分箱→写回 Excel”,共 7 步,每步都有明确目的,我们逐行拆解:

1. 导入工具库

import pandas as pd  # 处理Excel数据的“神器”
import math          # 用于计算箱子数量(向上取整)

→ 只需这两个库,安装命令:pip install pandas openpyxl(openpyxl 是读取 Excel 的依赖)。

2. 读取 Excel 数据

df = pd.read_excel('水果分箱.xlsx')

→ 把 Excel 文件读成 “数据表格”(DataFrame),后续所有操作都在这个表格上进行。

3. 分箱规则参数化(关键!方便修改)

max_per_box = 24   # 每箱最多装24个(想改20个?直接改这个数)
max_boxes = 6      # 最多分6箱(要分8箱?改这里就行)

→ 所有规则集中在这里,不用改核心代码,新手也能灵活调整。

4. 核心分箱函数(代码的 “大脑”)

def split_into_boxes(total, max_per_box=24, max_boxes=6):
    # 1. 处理空值:如果“水果总数”是空的,返回6个0(对应6箱)
    if pd.isna(total):
        return [0] * max_boxes
    # 2. 确保总数是整数(避免Excel里的小数问题)
    total = int(total)
    # 3. 计算需要多少箱子:总数÷每箱数,向上取整(比如50÷24=2.08→需3箱)
    num_boxes = math.ceil(total / max_per_box)
    # 4. 限制最多6箱:即使需要7箱,也只分6箱(符合规则)
    num_boxes = min(num_boxes, max_boxes)
    # 5. 分配数量:先算每箱基础数,余数分给前几箱(避免某箱数量超标)
    base = total // num_boxes  # 基础数量(如50÷3=16)
    remainder = total % num_boxes  # 余数(50%3=2)
    # 前2箱分16+1=17个,第3箱分16个,后面补0到6箱
    boxes = [base + 1 if i < remainder else base for i in range(num_boxes)]
    boxes += [0] * (max_boxes - num_boxes)
    return boxes

举个例子:50 个苹果代入函数:

  • num_boxes=math.ceil (50/24)=3(需 3 箱)
  • base=50//3=16,remainder=50%3=2
  • boxes=[17,17,16,0,0,0](前 2 箱 17 个,第 3 箱 16 个,后 3 箱 0)

完美符合 “每箱≤24、最多 6 箱” 的规则!

5. 批量计算所有水果的分箱结果

# 对“水果总数”列的每一行,都执行分箱函数
result = df['水果总数'].apply(split_into_boxes)
# 把结果转成新表格,列名是“箱 1”到“箱 6”
boxes_df = pd.DataFrame(result.tolist(), columns=[f'箱 {i}' for i in range(1, max_boxes + 1)])

→ 不管 Excel 有多少行数据,1 行代码就能批量处理,比手动快 10 倍!

6. 写回原表格 + 保存文件

# 把分箱结果列(箱1-箱6)写入原Excel表,已有这些列就覆盖(避免手动删空列)
for col in boxes_df.columns:
    df[col] = boxes_df[col]
# 保存为新文件,不保留索引(Excel更整洁)
df.to_excel('水果分箱结果.xlsx', index=False)
print("已生成文件:水果分箱结果.xlsx ")

→ 不用手动复制粘贴,直接得到带分箱结果的 Excel,打开就能用!

三、代码技术要点:3 个贴心设计

自动处理空值:遇到 “水果总数” 为空的行,自动填 6 个 0,避免漏填;

灵活修改规则:想改 “每箱 30 个、最多 8 箱”,只需改 max_per_box 和 max_boxes 两个参数;

覆盖旧列不报错:如果原 Excel 已有 “箱 1” 列,会自动覆盖旧数据,不用手动删除。

四、实操小贴士:新手必看

Excel 文件位置:要把 “水果分箱.xlsx” 和代码放在同一个文件夹,否则要写全文件路径(比如pd.read_excel(‘D:/工作/水果分箱.xlsx’));

处理其他数据:除了水果,商品包装、物料分配也能用,只需把 “水果总数” 改成 “商品总数”“物料总数”;

查看中间结果:想确认分箱是否正确,可在第 5 步后加print(boxes_df),运行时会显示分箱结果。

五、效果演示:输入→输出

生成的结果 Excel(水果分箱结果.xlsx):

水果总数箱 1箱 2箱 3箱 4箱 5箱 6
321615
130222222222121
7720191919
124212121212020
1172424232323
2020

六、全部源代码(复制即用)

import pandas as pd
import math

# === 1. 读取 Excel 数据 ===
df = pd.read_excel('水果分箱.xlsx')

# === 2. 参数设置 ===
max_per_box = 24   # 每箱最多装 24 个
max_boxes = 6      # 最多 6 箱

# === 3. 分箱计算函数 ===
def split_into_boxes(total, max_per_box=24, max_boxes=6):
    if pd.isna(total):
        return [0] * max_boxes
    total = int(total)
    num_boxes = math.ceil(total / max_per_box)
    num_boxes = min(num_boxes, max_boxes)

    base = total // num_boxes
    remainder = total % num_boxes
    boxes = [base + 1 if i < remainder else base for i in range(num_boxes)]
    boxes += [0] * (max_boxes - num_boxes)
    return boxes

# === 4. 分配结果计算 ===
result = df['水果总数'].apply(split_into_boxes)
boxes_df = pd.DataFrame(result.tolist(), columns=[f'箱 {i}' for i in range(1, max_boxes + 1)])

# === 5. 写入回原表(如果已存在箱列则覆盖) ===
for col in boxes_df.columns:
    df[col] = boxes_df[col]

# === 6. 显示结果 ===
print(df)

# === 7. 保存为新文件 ===
df.to_excel('水果分箱结果.xlsx', index=False)
print(" 已生成文件:水果分箱结果.xlsx ")

如果需要调整分箱规则(比如按重量分箱),或者处理 CSV 文件,都可以留言告诉我,咱们再优化代码~

到此这篇关于Python一键搞定Excel数据自动分配的文章就介绍到这了,更多相关Python Excel数据自动分配内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用Python查看目录中的文件示例详解

    利用Python查看目录中的文件示例详解

    这篇文章主要给大家介绍了关于利用Python查看目录中的文件,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • Pygame实战练习之纸牌21点游戏

    Pygame实战练习之纸牌21点游戏

    21点想必是很多人童年时期的经典游戏,我们依旧能记得抱个老人机娱乐的场景,下面这篇文章主要给大家介绍了关于如何利用python写一个简单的21点小游戏的相关资料,需要的朋友可以参考下
    2021-09-09
  • Python+streamlit实现轻松创建人事系统

    Python+streamlit实现轻松创建人事系统

    streamlit 是 基于 Python 的一个非常强大的 web 构建系统,通过该类库,我们可以实现不需要编写一行前端代码而构建一个完整的 Web 应用。下面我们就来编写一个简单的人事系统吧
    2023-02-02
  • django模板获取list中指定索引的值方式

    django模板获取list中指定索引的值方式

    这篇文章主要介绍了django模板获取list中指定索引的值方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python实现图片压缩的案例详解

    Python实现图片压缩的案例详解

    这篇文章主要介绍了如何用最简洁的Python代码实现图片压缩效果,还可以保证照片不失真,感兴趣的小伙伴可以跟随小编一起动手试试
    2022-01-01
  • 用Python实现将一张图片分成9宫格的示例

    用Python实现将一张图片分成9宫格的示例

    今天小编就为大家分享一篇用Python实现将一张图片分成9宫格的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-07-07
  • 使用setup.py安装python包和卸载python包的方法

    使用setup.py安装python包和卸载python包的方法

    这篇文章主要介绍了使用setup.py安装python包和卸载python包的方法,大家参考使用吧
    2013-11-11
  • 基于Python实现股票数据分析的可视化

    基于Python实现股票数据分析的可视化

    在购买股票的时候,可以使用历史数据来对当前的股票的走势进行预测,这就需要对股票的数据进行获取并且进行一定的分析。本文将介绍如何通过Python实现股票数据分析的可视化,需要的可以参考一下
    2021-12-12
  • python操作redis基础

    python操作redis基础

    Redis(Remote Dictionary Server)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章主要介绍了python操作redis基础,需要的朋友可以参考下
    2025-05-05
  • Python中的包和模块实例

    Python中的包和模块实例

    这篇文章主要介绍了Python中的包和模块实例,本文给出了文件结构、实现代码及代码解释,需要的朋友可以参考下
    2014-11-11

最新评论