摘要:数据分散:销售、库存、客服等5个部门,分别提交独立Excel文件,字段格式不统一(如销售额有的带单位,有的用千分位逗号);
某电商公司运营小李每周都要面对这些“噩梦”:
1. 数据分散:销售、库存、客服等5个部门,分别提交独立Excel文件,字段格式不统一(如销售额有的带单位,有的用千分位逗号);
2. 手动合并:需将各表“销售额”“订单量”等核心数据复制到总表,常因格式错误反复核对;
3. 效率低下:仅数据整理就要耗费3小时,若遇领导临时修改需求,只能加班重做。
1. 原始数据准备(模拟场景)
假设data文件夹下有3个部门的周报文件(销售部周报.xlsx、市场部周报.xlsx、客服部周报.xlsx),结构如下:
日期 销售额(元) 订单量
2024-01-01 12345 20
2024-01-02 67890 25
2. 代码逐行解析
import pandas as pd # 导入pandas库,用于数据处理
import os # 导入os模块,用于操作文件和目录
# 存储所有数据的列表,初始化为空
all_data =
# 遍历'data'文件夹下的所有文件
for file in os.listdir('data'):
if file.endswith('.xlsx'): # 筛选出Excel文件
file_path = os.path.join('data', file) # 拼接完整文件路径
data = pd.read_excel(file_path) # 读取Excel数据到DataFrame
all_data.append(data) # 将读取的数据添加到列表中
# 使用concat函数垂直合并所有DataFrame,ignore_index重置行索引
result = pd.concat(all_data, ignore_index=True)
# 将合并后的数据保存到'总周报.xlsx',不保存行索引
result.to_excel('总周报.xlsx', index=False)
3. 解决真实问题的细节优化
• 处理格式差异:若某表“销售额”列包含单位(如“12345元”),可在读取后用result['销售额'] = result['销售额'].str.replace('元', '').astype(float)去除单位并转换为数值;
• 自动筛选关键列:若只想保留“日期”和“销售额”,可在合并后添加result = result[['日期', '销售额']];
• 错误处理:为避免文件读取失败,可添加try-except语句:
try:
data = pd.read_excel(file_path)
all_data.append(data)
except Exception as e:
print(f"读取{file}失败:{e}")
场景1:自动发送邮件周报
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText
msg = MIMEMultipart
msg['Subject'] = "本周销售总报告"
msg['From'] = "your_email@example.com"
msg['To'] = "manager@example.com"
# 附加文件
with open('总周报.xlsx', "rb") as f:
part = MIMEApplication(f.read, Name="总周报.xlsx")
part['Content-Disposition'] = f'attachment; filename="总周报.xlsx"'
msg.attach(part)
# 发送邮件
with smtplib.SMTP("smtp.example.com", 587) as server:
server.starttls
server.login("your_email@example.com", "your_password")
server.sendmail("your_email@example.com", "manager@example.com", msg.as_string)
场景2:批量重命名文件
import os
folder_path = 'data'
for file in os.listdir(folder_path):
if file.endswith('.xlsx'):
new_name = file.replace('周报', '数据汇总') # 替换文件名关键词
old_path = os.path.join(folder_path, file)
new_path = os.path.join(folder_path, new_name)
os.rename(old_path, new_path)
1. 常见错误:
◦ ModuleNotFoundError:确认pandas库已安装,可尝试pip install --upgrade pandas更新;
◦ 文件路径错误:使用绝对路径(如C:/workspace/data/)或os.path.abspath获取当前目录。
2. 学习资源:
◦ 官方文档:Pandas文档、Smtplib文档;
◦ 实战课程:B站搜索“Python办公自动化案例”,或学习《Python数据处理实战30例》电子书。
现在就打开电脑,用10行代码告别重复劳动!
评论区分享你的自动化成果,或提出需求,下期手把手教你用Python自动生成PPT!
来源:绿叶菜