批发商用Python把3小时Excel活压缩到1分钟——附完整代码
我是做调味品批发的,二十年来每天跟Excel打交道——订单、库存、销售记录,全靠手工整理。
直到上个月,我学会用Python处理这些数据,才发现以前花3小时干的活,现在1分钟就跑完了。
今天把完整过程写出来,代码全部附在文末,你直接复制就能用。
一、批发商的真实痛点
每天下班前,我都要做一件事:把当天的销售记录整理成报表,看看哪些产品卖得好,第二天好备货。
具体流程是:
1. 打开当天的订单Excel2. 按产品名称分类汇总3. 查一下未来几天的天气(影响备货!)4. 把天气情况和销量记在一起,找规律5. 决定明天进什么货
这套流程,熟练的话也要 3个小时。而且经常看得眼花,漏算、算错是常事。
💡 举个例子:下雨天火锅底料卖得明显好,但我以前从来没量化过。靠脑子记,"好像是这么回事",但拿不出数据支撑,备货有时候多有时候少,积压和缺货交替出现。 二、用Python自动处理,1分钟出结果
我的真实订单数据长这样(销售记录.csv):
看起来简单,但手工处理要花很长时间。用Python,分4步全自动:
Step 1:清洗订单数据
# 1. 读取真实订单import pandas as pd df = pd.read_csv('销售记录.csv')# 清洗:日期转格式、销量转整数、去空格 df['销售日期'] = pd.to_datetime(df['销售日期']) df['销售数量'] = pd.to_numeric(df['销售数量'], errors='coerce').fillna(0).astype(int) df['产品名称'] = df['产品名称'].str.strip()# 按日期汇总销量 daily = df.groupby('销售日期')['销售数量'].sum().reset_index() daily.columns = ['日期', '每日总销量']print(daily) 输出结果:
Step 2:免费获取历史天气数据
我用的 Open-Meteo 这个接口,无需注册、无需API Key,直接请求就返回JSON数据:
# 2. 获取武汉历史天气(免费,无需Key)import requests url = ("https://archive-api.open-meteo.com/v1/archive"f"?latitude=30.5928&longitude=114.3055"f"&start_date=2026-05-01&end_date=2026-05-05"f"&daily=temperature_2m_max,precipitation_sum,weathercode"f"&timezone=Asia/Shanghai") data = requests.get(url).json()print(data['daily']) Step 3:合并订单 + 天气数据
这是最关键的一步。pd.merge() 按日期把两张表拼在一起,就像Excel里的VLOOKUP,但更快更准:
# 3. 按日期合并(类似Excel的VLOOKUP) merged = pd.merge(daily, weather, on='日期', how='left')print(merged['日期', merged['每日总销量'], merged['天气状况']) 合并后的结果:
📊 发现规律:5月2日中雨,销量只有3件,是全周最低。这不是巧合——雨天餐厅客流少,备货意愿低,这个规律在更多数据上会被放大。 Step 4:计算相关系数
# 4. 温度 vs 销量 相关系数 corr = merged['最高温'].corr(merged['每日总销量'])print(f"温度 vs 销量相关系数:{corr:.3f}")# 输出:0.448(正相关,温度越高销量越高)三、我得到的 actionable 结论
✅ 结论1:温度越高,销量越高(相关系数 +0.448) 👉 夏天来临前,提前增加库存,尤其是凉拌调料(醋、生抽、辣椒油) ✅ 结论2:下雨天销量明显下降 👉 雨天不指望大订单,安排做库存盘点、整理货架 ✅ 结论3:这套分析以前花3小时,现在Python代码跑完 不到1分钟 👉 省下来的时间,用来研究更多赚钱的门道 ⚠️ 注意:目前只有5天的真实数据,样本量较小。建议积累30天数据后再跑一次,结论会更可靠。但代码框架已经搭好了,以后每天新增数据,直接跑同一套代码就行。 四、完整代码(复制即跑)
把下面代码保存为 analyze_real_orders.py,确保同目录下有 销售记录.csv,直接 python analyze_real_orders.py 就能跑:
#!/usr/bin/env python3# -*- coding: utf-8 -*-import pandas as pdimport requestsimport warnings warnings.filterwarnings('ignore')# ===== Step 1: 清洗真实订单 ===== df = pd.read_csv('销售记录.csv') df['销售日期'] = pd.to_datetime(df['销售日期']) df['销售数量'] = pd.to_numeric(df['销售数量'], errors='coerce').fillna(0).astype(int) df['产品名称'] = df['产品名称'].str.strip() daily = df.groupby('销售日期')['销售数量'].sum().reset_index() daily.columns = ['日期', '每日总销量'] daily['日期'] = daily['日期'].dt.strftime('%Y-%m-%d')# ===== Step 2: 获取天气数据 =====# 武汉坐标:30.5928, 114.3055 start = daily['日期'].min() end = daily['日期'].max() url = (f"https://archive-api.open-meteo.com/v1/archive" f"?latitude=30.5928&longitude=114.3055" f"&start_date={start}&end_date={end}" f"&daily=temperature_2m_max,precipitation_sum,weathercode" f"&timezone=Asia/Shanghai") resp = requests.get(url).json()['daily'] weather_code_map = {0:"晴", 1:"晴间多云", 2:"多云", 3:"阴",51:"小毛毛雨", 53:"毛毛雨", 55:"大毛毛雨",61:"小雨", 63:"中雨", 65:"大雨"} weather_df = pd.DataFrame({'日期': resp['time'],'最高温': resp['temperature_2m_max'],'降水量': resp['precipitation_sum'],'天气状况': [weather_code_map.get(c, str(c)) for c in resp['weathercode']] }) weather_df['是否下雨'] = weather_df['降水量'] > 0# ===== Step 3: 合并 ===== merged = pd.merge(daily, weather_df, on='日期', how='left')# ===== Step 4: 分析 + 输出 =====print("每日销量 + 天气:")print(merged[['日期','每日总销量','天气状况','最高温']].to_string(index=False))print(f"\n温度 vs 销量相关系数:{merged['最高温'].corr(merged['每日总销量']):.3f}")# 保存Excelwith pd.ExcelWriter('真实订单_天气关联分析.xlsx', engine='openpyxl') as w: df.to_excel(w, sheet_name='原始订单', index=False) daily.to_excel(w, sheet_name='每日汇总', index=False) merged.to_excel(w, sheet_name='合并结果', index=False)print("\n✅ 保存完成:真实订单_天气关联分析.xlsx") 五、你怎么开始?
不需要你有编程基础,按这个顺序来:
1️⃣ 安装Python(官网 python.org,勾选"Add to PATH")
2️⃣ 命令行运行 pip install pandas requests openpyxl
3️⃣ 把你的订单Excel另存为CSV格式(注意编码选UTF-8)
4️⃣ 复制上面的完整代码,保存为 .py 文件,双击运行
第一次可能遇到点问题,很正常。把报错截图发给我,我帮你改。
💬 说句心里话 我做了二十年调味品批发,以前总觉得"学编程是年轻人干的事"。现在发现,Python 不是让你变成程序员,是让你从重复劳动里解脱出来。省下来的时间,用来思考生意本身,这才是值钱的地方。 —— 航源,武汉调味品批发,2026年5月