如果你还在用 vba 复制粘贴、写长串宏代码,那么这篇文章会让你打开新世界的大门。python + pandas 不仅能完成 vba 能做的一切,还能轻松应对几十万行数据、批量处理上百个文件,而且代码可读性更强、维护成本更低。
一、为什么要用 python 替代 vba?
| 对比项 | vba | python |
|---|---|---|
| 学习曲线 | 陡峭,语法老旧 | 平缓,语法直观 |
| 大数据支持 | 易卡死 | 轻松百万行 |
| 批量处理 | 繁琐 | 一行循环搞定 |
| 生态工具 | office 内 | pandas / numpy / matplotlib |
| 可维护性 | 差 | 强,版本管理友好 |
一句话总结:vba 适合“点一点”,python 适合“批量化、工程化”。
二、环境准备
1. 安装 python
推荐 anaconda(自带 pandas):
conda install pandas openpyxl xlsxwriter
或 pip:
pip install pandas openpyxl xlsxwriter
2. 核心库说明
- pandas:数据处理核心
- openpyxl:读写
.xlsx - xlsxwriter:高性能写 excel(支持图表)
三、基础操作:读 & 写 excel
1. 读取 excel
import pandas as pd
df = pd.read_excel("data.xlsx", sheet_name="sheet1")
print(df.head())
支持:
sheet_name=0(第一个表)usecols="a:c"(指定列)skiprows=2(跳过前几行)
2. 写入 excel
df.to_excel("output.xlsx", index=false)
不写索引:index=false
指定工作表名:sheet_name="结果"
四、批量读写:真正解放双手
场景:合并一个文件夹下所有 excel
import os
import pandas as pd
folder_path = "./excels/"
all_dfs = []
for file in os.listdir(folder_path):
if file.endswith(".xlsx"):
df = pd.read_excel(os.path.join(folder_path, file))
df["来源文件"] = file # 标记来源
all_dfs.append(df)
result = pd.concat(all_dfs, ignore_index=true)
result.to_excel("合并结果.xlsx", index=false)
vba 要几十行,python 10 行搞定
五、数据清洗实战(高频场景)
1. 删除空行
df.dropna(how="all", inplace=true)
2. 填充缺失值
df["销售额"].fillna(0, inplace=true)
df["城市"].fillna("未知", inplace=true)
3. 去重
df.drop_duplicates(subset="订单号", keep="first", inplace=true)
4. 类型转换(常见坑)
df["日期"] = pd.to_datetime(df["日期"]) df["金额"] = df["金额"].astype(float)
excel 里看着是数字,python 里可能是字符串!
5. 字符串清洗
df["姓名"] = df["姓名"].str.strip() # 去空格
df["手机号"] = df["手机号"].str.replace("-", "")
df = df[df["城市"].str.contains("北京|上海")]
6. 条件筛选
# 单条件 high_sales = df[df["销售额"] > 10000] # 多条件 vip_beijing = df[(df["会员"] == "是") & (df["城市"] == "北京")]
六、新增列 / 计算字段(告别公式)
1. 简单计算
df["利润"] = df["销售额"] - df["成本"]
2. if 逻辑(比 excel 公式清爽)
df["等级"] = df["销售额"].apply(
lambda x: "高" if x > 10000 else ("中" if x > 5000 else "低")
)
3. 分组统计(透 视表替代)
summary = df.groupby("城市")["销售额"].agg(
总销售额="sum",
平均销售额="mean",
订单数="count"
).reset_index()
等价于 excel 数据透 视表,但更快、可复用
七、excel 美化 & 高级输出
1. 多 sheet 输出
with pd.excelwriter("报表.xlsx", engine="xlsxwriter") as writer:
df.to_excel(writer, sheet_name="原始数据", index=false)
summary.to_excel(writer, sheet_name="汇总", index=false)
2. 自动调整列宽 + 冻结首行
workbook = writer.book
worksheet = writer.sheets["汇总"]
worksheet.freeze_panes(1, 0) # 冻结首行
for i, col in enumerate(summary.columns):
width = max(summary[col].astype(str).map(len).max(), len(col)) + 2
worksheet.set_column(i, i, width)
3. 添加图表(vba 最痛苦的部分)
chart = workbook.add_chart({"type": "column"})
chart.add_series({
"categories": "=汇总!$a$2:$a$10",
"values": "=汇总!$b$2:$b$10",
"name": "销售额"
})
worksheet.insert_chart("e2", chart)
八、定时自动运行(进阶)
windows 任务计划 / linux crontab
python excel_auto.py
结合:
- 每天自动拉取数据库 → 清洗 → 发邮件
- 财务日报 / 运营周报全自动生成
九、常见错误 & 避坑指南
| 问题 | 解决方案 |
|---|---|
| excel 被占用无法保存 | 关闭 excel 再运行 |
| 日期变成数字 | pd.to_datetime() |
| 科学计数法 | 写入时设置格式 |
| 中文乱码 | 使用 utf-8 |
| 内存爆炸 | 使用 chunksize 分批读 |
十、学习路径建议
掌握 pandas 基础(读、写、筛选)
熟练数据清洗(dropna / fillna / groupby)
学会批量处理文件
尝试自动化脚本 + 定时任务
进阶:sql + python + bi 工具
十一、总结
vba 是“办公技巧”,python 是“生产力工具”。
- 批量处理不再靠复制粘贴
- 数据清洗逻辑清晰、可复用
- 报表自动生成,零人工干预
- 代码一次写好,终身受用
当你第一次用 python 把 100 个 excel 合并成一张表,你会明白:
不是 excel 不行,而是你该换工具了。
只要告诉我你最常用的 excel 场景即可。
以上就是python批量处理excel读写和数据清洗的完整教程的详细内容,更多关于python处理excel的资料请关注代码网其它相关文章!
发表评论