真实加薪经历分享
你有过这种经历吗
每天加班到晚上9点,做不完的Excel表格,复制粘贴复制粘贴,手指都 CTRL+C CTRL+V 到抽筋了,结果老板轻飘飘来一句:“这个数据再重新整理一下,明天早上给我
”
你是不是想摔键盘
我告诉你,我之前就是这样的
天天对着Excel表格,从早上9点干到晚上11点,周末也加班,整个人都是复制粘贴的机器
结果呢
工资条上的数字,三年没变过
但你猜后来怎么着
我用了Python,用代码处理了一次Excel表格,就一次
然后老板当场给我涨薪30%
这不是故事,是真事
今天我把这段经历和核心技术都写出来,看完你也能上手
你是不是也这样?
让我猜猜你现在的工作状态:
**你是不是每天在Excel里手动筛选数据
** 领导让你从100个文件里找出每个月的销售数据,你一个个打开,手动复制粘贴,复制粘贴,复制粘贴...弄完眼睛都花了
**你是不是经常对数值对到崩溃
** 十几个Excel文件,数字对不上,你不知道哪里出问题了,一个单元格一个单元格地查,查了3个小时,发现就是一个空格多了或者其他符号的问题
**你是不是一到月底就紧张
** 每月固定的报表时间,你得手动整理几十个同事发来的数据表,稍微一个不小心,错了,就是事故
如果这三条你中了任何一条,继续往下看
因为问题真的不在你不够努力,而是你一直在用最笨的方法
认知反转:不是Excel不行,是你一个人干了一个程序的活
很多人会说:“我用Excel也能处理啊,vlookup函数也很强大
”
是,Excel确实很强
但我问你几个问题:
让你从100个文件里筛选符合条件的数据,Excel能一键完成吗
让你每周固定时间自动生成报表,Excel能做到吗
让你同时处理10万行数据不出错,Excel能保证吗
**不能
**
Excel是个工具,但如果你每天都在重复做同样的事情,那就是在用体力换钱,用时间换钱,用命换钱
而Python不一样
Python是自动化,是批处理,是一次编写,永远运行
我再问你一个问题:同样是处理数据,你手动处理10个人的数据和100个人的数据,花的时间能一样吗
但用Python,10个人和100万个人,代码是一样的
这就是认知差距
不是我比你努力,而是我知道怎么让机器帮我干活
你干到这个月,月底还要加班整理报表
用Python的人,早就设置好定时任务,到点自动跑,月底该干嘛干嘛
老板不给这种人涨薪,给谁涨
核心技术:3个真实场景,手把手教你用Python处理Excel
接下来上强度
我给你3个完整可运行的代码示例,每个都是真实工作场景,你直接复制就能用
场景一:从多个Excel文件批量读取数据,合并成一个表
场景说明:你每个月要从20个销售同事发来的Excel表格里,汇总每个人的销售额
之前你是一个个打开,手动复制粘贴
现在,用Python,10秒钟搞定
import pandas as pd
import os
from pathlib import Path
# 定义数据文件夹路径
data_folder = Path("销售数据文件")
# 获取文件夹下所有Excel文件
excel_files = list(data_folder.glob("*.xlsx"))
# 准备一个列表,存放所有数据
all_data = []
# 遍历每个文件,读取数据
for file in excel_files:
# 读取Excel文件,假设数据在第一个sheet
df = pd.read_excel(file, sheet_name=0)
# 从文件名提取销售员姓名(假设文件名格式:张三_2024年1月.xlsx)
# 这里的处理可能因实际场景不同而需要调整
# 但核心思路是:从文件名或表格内容中获取关键信息
salesman_name = file.stem.split("_")[0] # 提取文件名中下划线前的部分
# 添加一列,标记数据来源
df["销售员"] = salesman_name
# 把处理后的数据加入列表
all_data.append(df)
# 合并所有数据
result = pd.concat(all_data, ignore_index=True)
# 保存结果到新的Excel文件
result.to_excel("汇总表.xlsx", index=False)
print(f"处理完成!共处理 {len(excel_files)} 个文件,合计 {len(result)} 条数据")
print("结果已保存到:汇总表.xlsx")
代码逐行解释:
import pandas as pd
import os
from pathlib import Path
# 导入pandas用于处理Excel,pathlib用于处理文件路径
# pandas是Python处理数据的神器,几乎所有Excel操作都离不开它
# 定义数据文件夹路径
data_folder = Path("销售数据文件")
# 用Path对象管理路径,比字符串更安全可靠
# 获取文件夹下所有Excel文件
excel_files = list(data_folder.glob("*.xlsx"))
# glob("*.xlsx") 找出所有xlsx文件,*是通配符
# 准备一个列表,存放所有数据
all_data = []
# 遍历每个文件,读取数据
for file in excel_files:
# 读取Excel文件,假设数据在第一个sheet
df = pd.read_excel(file, sheet_name=0)
# pd.read_excel 是pandas读取Excel的函数,返回DataFrame(数据框)
# 从文件名提取销售员姓名
salesman_name = file.stem.split("_")[0]
# file.stem 获取文件名(不含扩展名),split("_")用下划线分割,取第一部分
# 添加一列,标记数据来源
df["销售员"] = salesman_name
# 直接给DataFrame新增一列,非常方便
# 把处理后的数据加入列表
all_data.append(df)
# 循环结束
# 合并所有数据
result = pd.concat(all_data, ignore_index=True)
# pd.concat 合并多个DataFrame,ignore_index=True 重置行索引
# 保存结果到新的Excel文件
result.to_excel("汇总表.xlsx", index=False)
# to_excel 保存为Excel,index=False 不保存行索引
print(f"处理完成!共处理 {len(excel_files)} 个文件,合计 {len(result)} 条数据")
print("结果已保存到:汇总表.xlsx")
# 打印处理结果
运行效果:处理20个文件,假设每个文件100行数据,一共2000行数据,总耗时不超过10秒
输出如下:
处理完成!共处理 20 个文件,合计 2000 条数据
结果已保存到:汇总表.xlsx
适用场景:月度/季度汇总报表、多人数据合并、需要从多个文件提取固定信息进行汇总的工作
场景二:自动数据清洗——处理异常值和缺失值
场景说明:你从系统导出的数据总是有各种问题——有的是空值(NaN),有的是异常值(比如销售额是负数),有的是格式不对(有空格、特殊符号)
之前你一行行手动修改,现在,代码自动处理完
import pandas as pd
import numpy as np
# 读取原始数据(假设这是一个从系统导出的销售数据)
df = pd.read_excel("原始销售数据.xlsx")
print("=" * 50)
print("处理前的数据预览:")
print(df.head(10))
print(f"\n数据总行数:{len(df)}")
# ===== 第一步:处理缺失值 =====
# 1.1 删除整行都是空值的行
df = df.dropna(how="all")
# 1.2 对于销售额列,用0填充空值
# (根据业务场景,也可以用均值、中位数等填充)
df["销售额"] = df["销售额"].fillna(0)
# 1.3 对于日期列,删除日期为空的行
df = df.dropna(subset=["日期"])
# ===== 第二步:处理异常值 =====
# 2.1 删除销售额为负数的行(异常数据)
df = df[df["销售额"] >= 0]
# 2.2 删除销售额超过1亿的行(可能是输入错误)
df = df[df["销售额"] <= 100000000]
# 2.3 对销售额进行异常值检测(使用IQR方法,把超过3倍四分位距的数据视为异常)
Q1 = df["销售额"].quantile(0.25)
Q3 = df["销售额"].quantile(0.75)
IQR = Q3 - Q1
lower_bound = Q1 - 3 * IQR
upper_bound = Q3 + 3 * IQR
# 保留正常范围内的数据
df = df[(df["销售额"] >= lower_bound) & (df["销售额"] <= upper_bound)]
# ===== 第三步:数据格式清洗 =====
# 3.1 去除文本列的前后空格
df["客户名称"] = df["客户名称"].str.strip()
# 3.2 把客户名称中的多个空格替换为单个空格
df["客户名称"] = df["客户名称"].str.replace(r"\s+", " ", regex=True)
# 3.3 统一日期格式
df["日期"] = pd.to_datetime(df["日期"])
# 3.4 把销售额保留两位小数
df["销售额"] = df["销售额"].round(2)
# ===== 第四步:保存清洗后的数据 =====
df.to_excel("清洗后的销售数据.xlsx", index=False)
print("\n" + "=" * 50)
print("处理后的数据预览:")
print(df.head(10))
print(f"\n处理后数据总行数:{len(df)}")
print("结果已保存到:清洗后的销售数据.xlsx")
代码逐行解释:
import pandas as pd
import numpy as np
# 导入pandas处理数据,numpy用于数值计算
# 读取原始数据
df = pd.read_excel("原始销售数据.xlsx")
# 读取Excel,返回DataFrame
print("=" * 50)
print("处理前的数据预览:")
print(df.head(10))
# head(10) 显示前10行,方便查看数据
# ===== 第一步:处理缺失值 =====
# 1.1 删除整行都是空值的行
df = df.dropna(how="all")
# dropna 删除空值,how="all"表示只有全空才删除
# 1.2 对于销售额列,用0填充空值
df["销售额"] = df["销售额"].fillna(0)
# fillna 填充空值,0表示用0来填充
# 1.3 对于日期列,删除日期为空的行
df = df.dropna(subset=["日期"])
# subset 指定只看某列的空值
# ===== 第二步:处理异常值 =====
# 2.1 删除销售额为负数的行
df = df[df["销售额"] >= 0]
# 直接用条件过滤
# 2.2 删除销售额超过1亿的行
df = df[df["销售额"] <= 100000000]
# 2.3 异常值检测(IQR方法)
Q1 = df["销售额"].quantile(0.25)
Q3 = df["销售额"].quantile(0.75)
IQR = Q3 - Q1
# quantile 计算分位数,Q1是25%分位,Q3是75%分位
# IQR是四分位距,是统计学中常用的异常值判断标准
lower_bound = Q1 - 3 * IQR
upper_bound = Q3 + 3 * IQR
# 超过3倍IQR的数据视为异常
# 保留正常范围内的数据
df = df[(df["销售额"] >= lower_bound) & (df["销售额"] <= upper_bound)]
# ===== 第三步:数据格式清洗 =====
# 3.1 去除文本列的前后空格
df["客户名称"] = df["客户名称"].str.strip()
# str.strip() 去除字符串首尾空格
# 3.2 把多个空格替换为单个空格
df["客户名称"] = df["客户名称"].str.replace(r"\s+", " ", regex=True)
# 正则表达式\s+匹配一个或多个空格
# 3.3 统一日期格式
df["日期"] = pd.to_datetime(df["日期"])
# to_datetime 把各种日期格式转为标准datetime
# 3.4 把销售额保留两位小数
df["销售额"] = df["销售额"].round(2)
# ===== 第四步:保存 =====
df.to_excel("清洗后的销售数据.xlsx", index=False)
运行效果:
处理前的数据预览:
客户名称 日期 销售额
0 张三公司 2024-01-01 1000.0
1 李四公司 2024-01-02 nan
2 王五公司 2024-01-03 -500.0
3 赵六公司 2024-01-04 1500.0
...
处理后数据总行数:1897
结果已保存到:清洗后的销售数据.xlsx
适用场景:从系统导出的原始数据清洗、月报/季报数据预处理、处理格式不统一的数据
场景三:自动生成带格式的Excel报表
场景说明:你每个月要给老板一个报表,要求有数据、有图表、有格式,还要好看
之前你要复制数据、一个个调格式、画图表、调颜色...现在,设置好一次,后面每月自动生成
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
from openpyxl.chart import BarChart, Reference
from openpyxl.utils.dataframe import dataframe_to_rows
# ===== 准备数据 =====
# 假设这是从数据库或Excel读取的月度销售数据
data = {
"月份": ["1月", "2月", "3月", "4月", "5月", "6月"],
"销售额": [120000, 135000, 128000, 142000, 156000, 168000],
"成本": [80000, 88000, 85000, 92000, 98000, 105000],
"利润": [40000, 47000, 43000, 50000, 58000, 63000]
}
df = pd.DataFrame(data)
# ===== 创建工作簿 =====
wb = Workbook()
ws = wb.active
ws.title = "月度销售报表"
# ===== 写入数据 =====
# 从第3行开始写数据(第1行是标题,第2行是表头)
ws.merge_cell("A1:E1")
ws["A1"] = "2024年上半年销售报表"
ws["A1"].font = Font(size=16, bold=True, color="FFFFFF")
ws["A1"].alignment = Alignment(horizontal="center")
ws["A1"].fill = PatternFill(start_color="1F4E78", end_color="1F4E78", fill_type="solid")
ws["A1"].height = 25
# 写入表头
headers = list(df.columns)
for col_num, header inenumerate(headers, 1):
cell = ws.cell(row=2, column=col_num, value=header)
cell.font = Font(bold=True, color="FFFFFF")
cell.alignment = Alignment(horizontal="center")
cell.fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
cell.border = Border(
left=Side(style="thin"),
right=Side(style="thin"),
top=Side(style="thin"),
bottom=Side(style="thin")
)
# 写入数据
for r_idx, row inenumerate(df.values, 3):
for c_idx, value inenumerate(row, 1):
cell = ws.cell(row=r_idx, column=c_idx, value=value)
cell.alignment = Alignment(horizontal="center")
cell.border = Border(
left=Side(style="thin"),
right=Side(style="thin"),
top=Side(style="thin"),
bottom=Side(style="thin")
)
# 利润列用颜色区分(正数绿色,负数红色)
if headers[c_idx - 1] == "利润":
if value >= 50000:
cell.font = Font(color="00B050") # 绿色
else:
cell.font = Font(color="FF0000") # 红色
# 设置列宽
ws.column_dimensions["A"].width = 12
ws.column_dimensions["B"].width = 15
ws.column_dimensions["C"].width = 15
ws.column_dimensions["D"].width = 15
ws.column_dimensions["E"].width = 15
# ===== 添加图表 =====
chart = BarChart()
chart.title = "月度销售趋势"
chart.style = 10
chart.x_axis.title = "月份"
chart.y_axis.title = "金额(元)"
# 设置图表数据范围
data_ref = Reference(ws, min_col=2, min_row=2, max_row=8, max_col=4)
cats = Reference(ws, min_col=1, min_row=3, max_row=8)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats)
# 设置图表位置
ws.add_chart(chart, "G3")
# 保存文件
wb.save("自动生成的月度报表.xlsx")
print("报表生成完成!文件已保存:自动生成的月度报表.xlsx")
代码逐行解释:
import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment, PatternFill, Border, Side
from openpyxl.chart import BarChart, Reference
# openpyxl是Python操作Excel格式和图表的库,功能非常强大
# 还可以创建公式、设置单元格样式、插入图表等
# ===== 准备数据 =====
# 用字典创建示例数据
data = {
"月份": ["1月", "2月", "3月", "4月", "5月", "6月"],
...
}
df = pd.DataFrame(data)
# ===== 创建工作簿 =====
wb = Workbook()
ws = wb.active
ws.title = "月度销售报表"
# ===== 写入数据 =====
# 合并单元格,写入标题
ws.merge_cell("A1:E1")
ws["A1"] = "2024年上半年销售报表"
ws["A1"].font = Font(size=16, bold=True, color="FFFFFF")
# Font 设置字体:大小、粗细、颜色
ws["A1"].alignment = Alignment(horizontal="center")
# Alignment 设置对齐方式
ws["A1"].fill = PatternFill(start_color="1F4E78", end_color="1F4E78", fill_type="solid")
# PatternFill 设置背景色
# 写入表头
headers = list(df.columns)
for col_num, header inenumerate(headers, 1):
cell = ws.cell(row=2, column=col_num, value=header)
# 设置表头样式:加粗、白字、深蓝背景
cell.font = Font(bold=True, color="FFFFFF")
cell.fill = PatternFill(start_color="4472C4", end_color="4472C4", fill_type="solid")
# 写入数据(遍历DataFrame)
for r_idx, row inenumerate(df.values, 3):
for c_idx, value inenumerate(row, 1):
cell = ws.cell(row=r_idx, column=c_idx, value=value)
# 简单的边框样式
cell.border = Border(
left=Side(style="thin"),
right=Side(style="thin"),
...
)
# 利润列用颜色区分
if headers[c_idx - 1] == "利润":
if value >= 50000:
cell.font = Font(color="00B050")
# 设置列宽
ws.column_dimensions["A"].width = 12
# ===== 添加图表 =====
chart = BarChart()
chart.title = "月度销售趋势"
# 创建柱状图
data_ref = Reference(ws, min_col=2, min_row=2, max_row=8, max_col=4)
cats = Reference(ws, min_col=1, min_row=3, max_row=8)
chart.add_data(data_ref, titles_from_data=True)
chart.set_categories(cats)
# Reference 定义图表数据范围和分类
ws.add_chart(chart, "G3")
# 把图表添加到工作表的G3位置
# 保存文件
wb.save("自动生成的月度报表.xlsx")
运行效果:生成一个Excel文件,包含格式化好的数据表(标题、表头、数据、边框、颜色区分),还自带一个美观的柱状图
直接打开就能用,格式完全对齐
适用场景:月度/季度汇报材料、给领导看的格式化报表、自动化报表生成
安装和使用
上面三个场景的代码,你需要安装两个库:
pip install pandas openpyxl
- •
openpyxl:用于读写Excel格式、创建图表
安装好之后,把代码复制到一个 .py 文件里(比如 process_excel.py),创建一个测试的Excel文件,运行就行了:
python process_excel.py
就是这么快
总结:为什么Python能帮你涨薪?
今天给你讲了三件事:
**第一,重复性的Excel工作就是在消耗你的生命
** 复制粘贴谁都会,但如果你每天花3小时干这个,而别人用代码10分钟搞定,那差距就不是一点半点了
**第二,用Python处理Excel,是降维打击
** 批量读取、自动化清洗、自动生成报表...这些功能Excel也能做,但你要一个个手动操作,而Python是一次写好,永远运行
**第三,会用Python的人,老板看得见
** 你干到半夜12点,老板觉得你勤奋
但别人用Python到点下班、工作还干得更好,老板不给他涨薪给谁涨
今天就可以做的事情
别光收藏不做
给你三个立刻能上手的行动:
**第一步,今天就装好Python环境
**
去 anaconda.com 下载安装,然后打开命令行输入 pip install pandas openpyxl,回车,等着安装完
**第二步,找一个你最近要做的Excel任务
**
不用多,就找一个最让你头疼的、每次都要手动整理的,用今天学的代码改一改,试一试
**第三步,用成了,就在周会上提一下
**
不用说是Python,你可以说“最近学了个自动化的方法,效率提高了不少”
让老板知道你在进步
结尾
最后给你留一个问题:**你现在每天在Excel上花多长时间
如果把这个时间省下来,你会用来做什么
**
欢迎在评论区聊聊
觉得有用的话,点个赞,转发给同样需要的朋友
我是小甲鱼,下期教你更多Python实战干货
本文涉及的技术栈:Python、pandas、openpyxl
适合人群:Python初学者、日常需要处理Excel的上班族、想提升效率的人