Python一鍵搞定Excel數(shù)據(jù)自動分配
做庫存管理、生鮮分揀時,你是不是也遇到過這些麻煩?—— 手里有幾十行水果總數(shù)數(shù)據(jù),要按 “每箱最多 24 個、最多分 6 箱” 的規(guī)則分配,手動算不僅慢,還容易漏算余數(shù)、填錯單元格。

今天分享一段 Python 代碼,3 步完成 Excel 水果分箱,自動處理空值、覆蓋舊列,新手也能直接用!
一、場景痛點:手動分箱的 3 個坑
假設(shè)你有這樣一份 Excel 表(“水果分箱.xlsx”):
| 水果總數(shù) | 箱 1 | 箱 2 | 箱 3 | 箱 4 | 箱 5 | 箱 6 |
|---|---|---|---|---|---|---|
| 32 | ||||||
| 130 | ||||||
| 77 | ||||||
| 124 | ||||||
| 117 | ||||||
| 20 |
要按規(guī)則分箱(每箱≤24 個,最多 6 箱),手動算會遇到:
- 余數(shù)難處理:50 個蘋果,24×2=48,剩 2 個,得手動補 1 箱(共 3 箱:24,24,2);
- 空值易出錯:橙子總數(shù)為空,手動可能填錯成 0 或漏填;
- 批量效率低:100 行數(shù)據(jù)要算 100 次,改規(guī)則(如每箱 20 個)又得重算。
而 Python 代碼能自動解決這些問題,全程不用手動計算!
二、代碼拆解:5 分鐘看懂分箱邏輯
這段代碼核心是 “讀取 Excel→按規(guī)則分箱→寫回 Excel”,共 7 步,每步都有明確目的,我們逐行拆解:
1. 導入工具庫
import pandas as pd # 處理Excel數(shù)據(jù)的“神器” import math # 用于計算箱子數(shù)量(向上取整)
→ 只需這兩個庫,安裝命令:pip install pandas openpyxl(openpyxl 是讀取 Excel 的依賴)。
2. 讀取 Excel 數(shù)據(jù)
df = pd.read_excel('水果分箱.xlsx')
→ 把 Excel 文件讀成 “數(shù)據(jù)表格”(DataFrame),后續(xù)所有操作都在這個表格上進行。
3. 分箱規(guī)則參數(shù)化(關(guān)鍵!方便修改)
max_per_box = 24 # 每箱最多裝24個(想改20個?直接改這個數(shù)) max_boxes = 6 # 最多分6箱(要分8箱?改這里就行)
→ 所有規(guī)則集中在這里,不用改核心代碼,新手也能靈活調(diào)整。
4. 核心分箱函數(shù)(代碼的 “大腦”)
def split_into_boxes(total, max_per_box=24, max_boxes=6):
# 1. 處理空值:如果“水果總數(shù)”是空的,返回6個0(對應(yīng)6箱)
if pd.isna(total):
return [0] * max_boxes
# 2. 確??倲?shù)是整數(shù)(避免Excel里的小數(shù)問題)
total = int(total)
# 3. 計算需要多少箱子:總數(shù)÷每箱數(shù),向上取整(比如50÷24=2.08→需3箱)
num_boxes = math.ceil(total / max_per_box)
# 4. 限制最多6箱:即使需要7箱,也只分6箱(符合規(guī)則)
num_boxes = min(num_boxes, max_boxes)
# 5. 分配數(shù)量:先算每箱基礎(chǔ)數(shù),余數(shù)分給前幾箱(避免某箱數(shù)量超標)
base = total // num_boxes # 基礎(chǔ)數(shù)量(如50÷3=16)
remainder = total % num_boxes # 余數(shù)(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 個蘋果代入函數(shù):
- 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 箱” 的規(guī)則!
5. 批量計算所有水果的分箱結(jié)果
# 對“水果總數(shù)”列的每一行,都執(zhí)行分箱函數(shù)
result = df['水果總數(shù)'].apply(split_into_boxes)
# 把結(jié)果轉(zhuǎn)成新表格,列名是“箱 1”到“箱 6”
boxes_df = pd.DataFrame(result.tolist(), columns=[f'箱 {i}' for i in range(1, max_boxes + 1)])
→ 不管 Excel 有多少行數(shù)據(jù),1 行代碼就能批量處理,比手動快 10 倍!
6. 寫回原表格 + 保存文件
# 把分箱結(jié)果列(箱1-箱6)寫入原Excel表,已有這些列就覆蓋(避免手動刪空列)
for col in boxes_df.columns:
df[col] = boxes_df[col]
# 保存為新文件,不保留索引(Excel更整潔)
df.to_excel('水果分箱結(jié)果.xlsx', index=False)
print("已生成文件:水果分箱結(jié)果.xlsx ")
→ 不用手動復(fù)制粘貼,直接得到帶分箱結(jié)果的 Excel,打開就能用!
三、代碼技術(shù)要點:3 個貼心設(shè)計
自動處理空值:遇到 “水果總數(shù)” 為空的行,自動填 6 個 0,避免漏填;
靈活修改規(guī)則:想改 “每箱 30 個、最多 8 箱”,只需改 max_per_box 和 max_boxes 兩個參數(shù);
覆蓋舊列不報錯:如果原 Excel 已有 “箱 1” 列,會自動覆蓋舊數(shù)據(jù),不用手動刪除。
四、實操小貼士:新手必看
Excel 文件位置:要把 “水果分箱.xlsx” 和代碼放在同一個文件夾,否則要寫全文件路徑(比如pd.read_excel(‘D:/工作/水果分箱.xlsx’));
處理其他數(shù)據(jù):除了水果,商品包裝、物料分配也能用,只需把 “水果總數(shù)” 改成 “商品總數(shù)”“物料總數(shù)”;
查看中間結(jié)果:想確認分箱是否正確,可在第 5 步后加print(boxes_df),運行時會顯示分箱結(jié)果。
五、效果演示:輸入→輸出
生成的結(jié)果 Excel(水果分箱結(jié)果.xlsx):
| 水果總數(shù) | 箱 1 | 箱 2 | 箱 3 | 箱 4 | 箱 5 | 箱 6 |
|---|---|---|---|---|---|---|
| 32 | 16 | 15 | ||||
| 130 | 22 | 22 | 22 | 22 | 21 | 21 |
| 77 | 20 | 19 | 19 | 19 | ||
| 124 | 21 | 21 | 21 | 21 | 20 | 20 |
| 117 | 24 | 24 | 23 | 23 | 23 | |
| 20 | 20 |
六、全部源代碼(復(fù)制即用)
import pandas as pd
import math
# === 1. 讀取 Excel 數(shù)據(jù) ===
df = pd.read_excel('水果分箱.xlsx')
# === 2. 參數(shù)設(shè)置 ===
max_per_box = 24 # 每箱最多裝 24 個
max_boxes = 6 # 最多 6 箱
# === 3. 分箱計算函數(shù) ===
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. 分配結(jié)果計算 ===
result = df['水果總數(shù)'].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. 顯示結(jié)果 ===
print(df)
# === 7. 保存為新文件 ===
df.to_excel('水果分箱結(jié)果.xlsx', index=False)
print(" 已生成文件:水果分箱結(jié)果.xlsx ")
如果需要調(diào)整分箱規(guī)則(比如按重量分箱),或者處理 CSV 文件,都可以留言告訴我,咱們再優(yōu)化代碼~
到此這篇關(guān)于Python一鍵搞定Excel數(shù)據(jù)自動分配的文章就介紹到這了,更多相關(guān)Python Excel數(shù)據(jù)自動分配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 利用Python自動化實現(xiàn)Excel單元格數(shù)據(jù)驗證
- Python自動化實現(xiàn)寫入數(shù)據(jù)到Excel文件
- Python讀寫Excel大數(shù)據(jù)文件的3種有效方式對比
- Python+JavaScript實現(xiàn)瀏覽器讀取本地excel數(shù)據(jù)
- python使用pandas讀取excel文件中數(shù)據(jù)的四種方法
- Python實現(xiàn)Excel數(shù)據(jù)對比的實用方案
- Python數(shù)據(jù)處理之Excel報表自動化生成與分析
- 淺析Python如何在Excel中應(yīng)用數(shù)據(jù)透視表
相關(guān)文章
python 提取tuple類型值中json格式的key值方法
今天小編就為大家分享一篇python 提取tuple類型值中json格式的key值方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12
Python結(jié)合PyWebView庫打造跨平臺桌面應(yīng)用
隨著Web技術(shù)的發(fā)展,將HTML/CSS/JavaScript與Python結(jié)合構(gòu)建桌面應(yīng)用成為可能,本文將系統(tǒng)講解如何使用PyWebView庫實現(xiàn)這一創(chuàng)新方案,希望對大家有一定的幫助2025-04-04
Python WEB應(yīng)用部署的實現(xiàn)方法
這篇文章主要介紹了Python WEB應(yīng)用部署的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
Python FastAPI實現(xiàn)JWT校驗的完整指南
在現(xiàn)代Web開發(fā)中,構(gòu)建安全的API接口是開發(fā)者必須面對的核心挑戰(zhàn)之一,本文將深入探討如何基于FastAPI實現(xiàn)JWT(JSON Web Token)校驗機制,需要的可以了解下2025-05-05
python通用數(shù)據(jù)庫操作工具 pydbclib的使用簡介
這篇文章主要介紹了python通用數(shù)據(jù)庫操作工具 pydbclib的使用簡介,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2020-12-12

