ARTICLE · 1081151
Python办公自动化—— 操作 Excel 数据实战:清洗、筛选、透视、关联 4 板斧

配图由 AI 生成 · 仅作视觉示意
① 数据处理主力:pandas
② 第一招:清洗(去重、去符号、转类型)
③ 第二招:筛选与排序
从系统导出的 Excel 往往一团乱:重复行、空值、金额带¥符号、日期是字符串。手动筛选去重、VLOOKUP 关联,一下午就搭进去了。本篇用 pandas 几行代码把脏数据洗成干净报表,覆盖清洗、筛选排序、分组统计、关联匹配四大高频操作,并点出 6 个最容易翻车的坑。
import pandas as pd
df = pd.read_excel("脏数据.xlsx", engine="openpyxl") # 读 xlsx 必须指定引擎
print(df.shape, df.columns) # 先看几行几列、列名叫啥
df = df.drop_duplicates() # 去重
df["金额"] = (df["金额"].astype(str)
.str.replace("¥", "", regex=False)
.str.replace(" ", "", regex=False)
.astype(float)) # 去符号转数字
df["日期"] = pd.to_datetime(df["日期"], errors="coerce") # 文本转日期,转不了的变 NaT
df = df.dropna(subset=["客户"]) # 丢空客户行
hot = df[df["金额"] > 1000] # 单条件:金额大于 1000
vip = df[(df["地区"] == "华北") & (df["金额"] > 5000)] # 多条件用 & 连接
top = df.sort_values("金额", ascending=False).head(10) # 金额降序取前 10
by_dept = df.groupby("部门")["金额"].sum() # 各部门金额合计
monthly = df.groupby(["年份", "月份"])["金额"].mean() # 多键分组,月度均值
orders = pd.read_excel("订单.xlsx", engine="openpyxl")
cust = pd.read_excel("客户.xlsx", engine="openpyxl")
merged = orders.merge(cust, on="客户ID", how="left") # 按客户ID左关联
pv = pd.pivot_table(df, values="金额",
index="部门", columns="月份",
aggfunc="sum", fill_value=0)
pv.to_excel("部门月度透视.xlsx") # 直接存成一张透视表
2. 写出多一列:to_excel 默认把索引写成第一列(Unnamed:0),记得加 index=False。
4. 空值偷偷污染结果:对含 NaN 的列求和会得 NaN,先 dropna() 或 fillna(0) 再算。
6. 中文路径读不出:Python 3 默认 UTF-8 没问题,但路径含中文时务必带 engine="openpyxl",别用老式写法。
筛选是布尔索引,多条件用 &| 并加括号
分组统计 groupby + 聚合,等价于数据透视
透视表 pivot_table 一行出,多维汇总直接存 xlsx
守住六坑:引擎、index=False、类型、空值、位运算、中文路径
你在使用中踩过什么坑?或者对今天的内容有不同看法?欢迎在评论区聊聊,咱们一起讨论 👇
01 Python 办公自动化实战:6 步流程让重复工作自动跑
02 Python 操作 Excel 实战:4 个场景把报表活交给脚本