盤點打工人必備的十個Python自動化腳本
大家在職場辦公中是否遇到下面的問題?Excel表格滿天飛,處理起來很不容易;每個月郵件轟炸,逐個修改抄送名單到眼睛發酸;加班到深夜,卻還有很多分析報告未完成,等等場景。
如果你遇到上面的問題,那么恭喜你已經成為一個合格的打工人,如何解決這些問題,就是本節內容的核心,本節使用Python盤點十個在辦公場景中使用最多的腳本,幫你提高工作效率。
首先使用Python中的Faker庫生成一個包含員工信息的模擬數據集,字段為中文字段,包括員工編號、姓名、部門、工資、入職日期、郵箱等,這個案例數據集用于本節的代碼演示。
import pandas as pd
import numpy as np
from faker import Faker
# 初始化Faker,支持中文
fake = Faker("zh_CN")
# 生成100條員工數據
data = {
"員工編號": range(1, 101),
"姓名": [fake.name() for _ in range(100)],
"部門": np.random.choice(["人力資源部", "財務部", "信息技術部", "銷售部", "市場部"], 100),
"工資": np.random.randint(3000, 10000, 100),
"入職日期": [fake.date_between(start_date="-5y", end_date="today") for _ in range(100)],
"郵箱": [fake.email() for _ in range(100)],
}
# 創建DataFrame
df = pd.DataFrame(data)
# 保存為Excel文件
df.to_excel("員工數據.xlsx", index=False)
1.數據清洗與格式轉換
將入職日期格式化為 YYYY-MM-DD,并刪除工資低于5000的記錄,用于標準化數據格式,清理無效數據,手動修改日期格式和刪除記錄效率低,容易出錯。
import pandas as pd
# 讀取數據
df = pd.read_excel("員工數據.xlsx")
# 格式化日期
df["入職日期"] = pd.to_datetime(df["入職日期"]).dt.strftime("%Y-%m-%d")
# 刪除工資低于5000的記錄
df = df[df["工資"] >= 5000]
# 保存清洗后的數據
df.to_excel("清洗后的員工數據.xlsx", index=False)
2.按部門拆分Excel文件
將員工數據按部門拆分為多個Sheet,方便按部門查看數據,手動拆分數據費時費力,尤其是數據量較大時,使用這個腳本可批量操作。
import pandas as pd
df = pd.read_excel("員工數據.xlsx")
departments = df["部門"].unique()
with pd.ExcelWriter("按部門拆分的員工數據.xlsx") as writer:
for dept in departments:
df_dept = df[df["部門"] == dept]
df_dept.to_excel(writer, sheet_name=dept, index=False)
3.生成工資統計報表
統計每個部門的平均工資和總工資,生成部門工資概覽報表,手動計算統計指標容易出錯,尤其是數據量較大時。
import pandas as pd
df = pd.read_excel("員工數據.xlsx")
report = df.groupby("部門").agg({"工資": ["mean", "sum"]})
report.columns = ["平均工資", "總工資"]
report.to_excel("工資統計報表.xlsx")
4.自動發送工資條郵件
為每個員工生成工資條并發送郵件,自動化工資條發放,手動發送郵件效率低,容易遺漏或出錯。
import pandas as pd
import smtplib
from email.mime.text import MIMEText
df = pd.read_excel("員工數據.xlsx")
# 郵件配置
smtp_server = "smtp.example.com"
port = 587
sender_email = "hr@company.com"
password = "your_password"
for index, row in df.iterrows():
msg = MIMEText(f"尊敬的{row['姓名']},您的本月工資為{row['工資']}元。")
msg["Subject"] = "您的工資條"
msg["From"] = sender_email
msg["To"] = row["郵箱"]
with smtplib.SMTP(smtp_server, port) as server:
server.starttls()
server.login(sender_email, password)
server.send_message(msg)
5.為Excel添加條件格式
高亮顯示工資高于8000的員工,快速識別高工資員工,手動高亮顯示效率低,尤其是數據量較大時。
from openpyxl import load_workbook
from openpyxl.styles import PatternFill
wb = load_workbook("員工數據.xlsx")
ws = wb.active
# 定義綠色填充
green_fill = PatternFill(start_color="00FF00", end_color="00FF00", fill_type="solid")
for row in ws.iter_rows(min_row=2, max_col=4, max_row=ws.max_row):
if row[3].value > 8000: # 假設工資在第4列
for cell in row:
cell.fill = green_fill
wb.save("高亮顯示員工數據.xlsx")
6.生成員工入職年份分布圖
統計員工入職年份分布并生成圖表,分析員工入職趨勢,手動繪制圖表費時,尤其是數據量較大時。
import pandas as pd
from openpyxl import Workbook
from openpyxl.chart import BarChart, Reference
df = pd.read_excel("員工數據.xlsx")
df["入職年份"] = pd.to_datetime(df["入職日期"]).dt.year
year_distribution = df["入職年份"].value_counts().sort_index()
# 創建Excel圖表
wb = Workbook()
ws = wb.active
ws.append(["年份", "人數"])
for year, count in year_distribution.items():
ws.append([year, count])
chart = BarChart()
chart.title = "員工入職年份分布"
data_range = Reference(ws, min_col=2, min_row=1, max_row=len(year_distribution)+1, max_col=2)
categories = Reference(ws, min_col=1, min_row=2, max_row=len(year_distribution)+1)
chart.add_data(data_range, titles_from_data=True)
chart.set_categories(categories)
ws.add_chart(chart, "D2")
wb.save("員工入職年份分布.xlsx")
7.批量重命名Excel列名
將列名改為拼音格式,統一列名格式,方便后續處理,手動修改列名容易出錯,尤其是列數較多時。
import pandas as pd
df = pd.read_excel("員工數據.xlsx")
df.columns = ["employee_id", "name", "department", "salary", "join_date", "email"]
df.to_excel("重命名后的員工數據.xlsx", index=False)
8.填充空值
將缺失的郵箱填充為默認值,處理數據缺失問題,手動填充空值效率低,尤其是數據量較大時。
import pandas as pd
df = pd.read_excel("員工數據.xlsx")
df["郵箱"].fillna("無郵箱@公司.com", inplace=True)
df.to_excel("填充空值后的員工數據.xlsx", index=False)
9.生成隨機績效評分
為每位員工生成隨機績效評分(1-5分),模擬績效數據,手動生成隨機數據效率低。
import pandas as pd
import numpy as np
df = pd.read_excel("員工數據.xlsx")
df["績效評分"] = np.random.randint(1, 6, size=len(df))
df.to_excel("帶績效評分的員工數據.xlsx", index=False)
10.自動化數據驗證
在Excel中添加下拉列表限制部門輸入值,防止輸入錯誤數據,手動設置數據驗證繁瑣。
from openpyxl import load_workbook
from openpyxl.worksheet.datavalidation import DataValidation
wb = load_workbook("員工數據.xlsx")
ws = wb.active
# 添加數據驗證
dv = DataValidation(type="list", formula1='"人力資源部,財務部,信息技術部,銷售部,市場部"')
dv.add("C2:C100") # 假設部門列在C列
ws.add_data_validation(dv)
wb.save("帶數據驗證的員工數據.xlsx")
通過以上案例,你可以輕松實現多種Excel自動化任務,比如數據清洗與格式轉換、數據拆分與合并、統計分析與報表生成、自動化郵件發送、圖表生成與可視化等,通過這些Python腳本可以顯著提高工作效率!