Day1:用AI + Python批量清洗Excel数据,10分钟搞定一天的活
一、先问你一个问题
你有没有经历过这种场景——
周一早上,邮箱里躺着 8 个同事发来的 Excel 表格。
每个人的格式都不一样:有的用"姓名",有的用"名字";有的日期写"2024/3/1",有的写"2024-03-01";有的有空行,有的有重复数据……
你打开第一个表,开始复制粘贴。
两小时后,终于做好了一个看起来像样的汇总表。
然后你发现:有一列数据格式还是不对,整列需要重新处理。
这不是个例。
这是职场里每天都在发生的事。
今天,我们来一次性解决它。二、为什么这类工作最适合脚本处理?
Excel 数据清洗有一个很明显的特点:重复且有规律。
合并多个表格 → 每次操作都一样 删除空行 → 判断条件固定 统一列名 → 映射关系固定 格式标准化 → 转换规则固定
脚本不会累,不会出错,不会忘记某一步,而且可以无限次重复使用。
你今天花 30 分钟写好一个脚本,以后每次只需要 5 秒。三、今天要解决的核心场景
场景描述:
你有多个部门发来的 Excel 销售表格(或报名表、考勤表、数据表等),格式不完全统一,需要:
把多个文件合并成一个表 统一列名(比如把"名字"统一成"姓名") 删除空行和重复数据 把结果导出成一个新的 Excel 文件
四、环境准备
在开始之前,确保你安装了以下两个库:
pip install pandas openpyxl 如果你用的是 Anaconda,这两个库一般已经默认安装好了,可以直接跳过这步。
验证安装:import pandas as pd import openpyxl print("安装成功!") 五、最小可用版本:直接能跑的代码
下面是今天的核心脚本。
你只需要把第 5 行的文件夹路径改成你自己存放 Excel 文件的路径,就可以直接运行。
import pandas as pd import os from pathlib import Path=============================================
配置区:只需要改这里
=============================================
INPUT_FOLDER = "C:/Users/你的名字/Desktop/销售数据" # Excel 文件所在文件夹 OUTPUT_FILE = "C:/Users/你的名字/Desktop/汇总结果.xlsx" # 输出文件路径列名统一映射(把左边的列名改成右边的标准列名)
COLUMN_MAP = { "名字": "姓名", "部门名称": "部门", "销售": "销售额", "日期": "统计日期", }=============================================
def load_all_excel(folder): """读取文件夹里所有 Excel 文件""" all_dfs = [] folder_path = Path(folder) for file in folder_path.glob("*.xlsx"): print(f"正在读取:{file.name}") try: df = pd.read_excel(file) df["来源文件"] = file.name # 记录数据来自哪个文件 all_dfs.append(df) except Exception as e: print(f" ⚠️ 读取失败:{e}") if not all_dfs: print("⚠️ 没有找到任何 Excel 文件,请检查文件夹路径") return None # 合并所有表格 combined = pd.concat(all_dfs, ignore_index=True) print(f"\n✅ 共读取 {len(all_dfs)} 个文件,合并后共 {len(combined)} 行数据") return combined
def clean_data(df): """清洗数据""" original_count = len(df) # 1. 统一列名 df = df.rename(columns=COLUMN_MAP) print(f"\n已统一列名:{list(COLUMN_MAP.keys())} → {list(COLUMN_MAP.values())}") # 2. 删除全空行 df = df.dropna(how="all") # 3. 删除重复行(保留第一条) df = df.drop_duplicates() # 4. 去掉字符串列的前后空格 for col in df.select_dtypes(include="object").columns: df[col] = df[col].str.strip() removed = original_count - len(df) print(f"已清洗:删除 {removed} 条重复/空数据,剩余 {len(df)} 条") return df
def save_result(df, output_path): """保存结果""" df.to_excel(output_path, index=False) print(f"\n✅ 结果已保存到:{output_path}") print(f" 共 {len(df)} 条数据,{len(df.columns)} 个字段")
if __name__ == "__main__": print("=" * 50) print("Excel 批量合并 & 清洗工具") print("=" * 50) # 第一步:读取所有文件 df = load_all_excel(INPUT_FOLDER) if df is None: exit() # 第二步:清洗数据 df = clean_data(df) # 第三步:保存结果 save_result(df, OUTPUT_FILE) print("\n🎉 处理完成!")
六、怎么使用 AI 帮你改造脚本?
上面的脚本是一个通用版本。 但你的实际数据结构可能不一样。
这时候,你不需要自己改代码——让 AI 帮你改。把下面这段提示词复制给 AI(Cursor、Windsurf、ChatGPT 都可以):
AI 提示词模板:
我有多个 Excel 文件,每个文件里有以下列: [在这里列出你的列名,比如:姓名、工号、部门、销售额、日期] 我需要把这些文件合并成一个表,然后:请帮我修改这段 Python 脚本,实现以上功能。[把上面的脚本粘贴在这里]
把"日期"列统一成 YYYY-MM-DD 格式 把"销售额"列里的空值填充为 0 按"日期"列从新到旧排序 删除"姓名"为空的行
告诉 AI 你的具体需求,它会帮你生成完整的修改版本。
你不需要理解每一行代码,只需要确认脚本能跑通、结果是对的。
七、进阶:加几行代码,让脚本更好用
进阶 1:自动处理日期格式不统一的问题
在 clean_data 函数里加这段
if "统计日期" in df.columns: df["统计日期"] = pd.to_datetime(df["统计日期"], errors="coerce") df["统计日期"] = df["统计日期"].dt.strftime("%Y-%m-%d") print("日期列已统一格式")
进阶 2:自动生成清洗报告
在 save_result 之后加这段
print("\n=== 数据概览 ===") print(f"行数:{len(df)}") print(f"列数:{len(df.columns)}") print(f"列名:{list(df.columns)}") print(f"\n空值统计:") print(df.isnull().sum())
进阶 3:支持读取 .xls 旧格式文件
pip install xlrd 把 glob("*.xlsx") 改成下面这行,同时支持 xlsx 和 xls
for file in list(folder_path.glob(".xlsx")) + list(folder_path.glob(".xls")):
八、实际运行效果
运行脚本后,终端会显示类似下面的输出:
================================================== Excel 批量合并 & 清洗工具 ================================================== 正在读取:销售数据_北京.xlsx 正在读取:销售数据_上海.xlsx 正在读取:销售数据_深圳.xlsx 正在读取:销售数据_杭州.xlsx✅ 共读取 4 个文件,合并后共 1240 行数据
已统一列名:['名字', '部门名称'] → ['姓名', '部门']已清洗:删除 47 条重复/空数据,剩余 1193 条
✅ 结果已保存到:C:/Users/.../汇总结果.xlsx 共 1193 条数据,7 个字段
🎉 处理完成!
打开输出的 Excel 文件,你会看到:
所有数据整齐排在一个表里 列名统一 空行和重复数据已清除 多了一列"来源文件",方便你追溯数据来源
九、常见问题
Q:运行报错
ModuleNotFoundError: No module named 'pandas'A:说明 pandas 没装。在终端运行 pip install pandas openpyxl,然后重新运行脚本。
FileNotFoundErrorA:检查 INPUT_FOLDER 路径是否正确。Windows 路径注意用正斜杠 / 或双反斜杠 \\。
A:可能有看不见的空格。在 COLUMN_MAP 里把原始列名加上 strip 处理:
df.columns = df.columns.str.strip() Q:Excel 文件里有多个 Sheet,怎么处理?A:在 pd.read_excel(file) 里加参数:
df = pd.read_excel(file, sheet_name=0) # 读第 1 个 Sheet或者
df = pd.read_excel(file, sheet_name="汇总") # 读名为"汇总"的 Sheet
十、今天的收获总结
你今天学到了:
✅ 用 pandas 读取和合并多个 Excel 文件 ✅ 统一列名、删除空行和重复数据 ✅ 用 AI 提示词快速改造脚本适应你的数据结构 ✅ 生成带数据来源标注的汇总文件
下次你面对一堆格式不一的 Excel 表,记得打开它。
十一、下一篇预告
Day 2:Word 批量排版与文档生成>
从 Excel 名单批量生成个性化 Word 文档——
通知、证明信、报价单、邀请函,不再需要一遍遍改名字和日期。
💡 关注公众号"量子位开发手记",下一篇文章第一时间推送。
—— 量子位开发手记 · AI办公自动化系列 Day1 ——
夜雨聆风