本文主要介绍在工作中怎么利用 python 提升工作效率的
背景
每月月初的时候,人力资源那边会给我们一份销售表格,我们需要把表格里的内容整理成既定的格式,生成 3 个子文件,然后上传到后台的提成分摊系统
,来计算出销售提成,并生成财务报表。
其中,把表格里的内容整理成既定的格式,生成3个子文件
的方式,之前的同事完全是手工处理的,这样做的弊端是什么呢?
- 麻烦,每次都需要粘贴复制;
- 容易出错,因为有些列的内容需要处理一下;
- 耗时,即便是熟练操作,也需要至少十分钟。
所以,交接到我手里后,就对这部分工作进行了脚本化
脚本处理
import pandas as pd
SOURCE_FILE_PATH = '.../24年6月签单明细.xlsx'
OUTPUT_MC_PATH = '.../2024-06/2024-06MC.xlsx'
OUTPUT_CC_PERSON = '.../2024-06/2024-06cc人员.xlsx'
OUTPUT_CC_ORDER = '.../2024-06/2024-06cc订单.xlsx'
split = SOURCE_FILE_PATH.split('/')
def mc(df):
print('LP明细数据开始处理')
# 创建新的DataFrame来存储整理后的数据
new_df = pd.DataFrame()
# 重命名列名
column_mapping = {
'订单id': '续费订单id',
'student_id': '学生ID',
'student_name': '学生姓名',
'staff_id': 'LP_ID',
'staff_name': 'LP',
'订单支付时间': '续费时间',
'续费金额': '续费金额',
'提点': '提点'
}
df.rename(columns=column_mapping, inplace=True)
# 复制其他列到新的DataFrame
new_df['续费订单id'] = df['续费订单id']
new_df['学生ID'] = df['学生ID']
new_df['学生姓名'] = df['学生姓名']
new_df['LP_ID'] = df['LP_ID']
new_df['LP'] = df['LP']
new_df['续费时间'] = df['续费时间']
new_df['续费金额'] = df['续费金额']
# 将提点列转换为字符串类型
df['提点'] = df['提点'].astype(str)
# 转换提点列的百分比为小数,并保留4位小数
new_df['提点'] = df['提点'].str.rstrip('%').astype(float).round(4)
new_df['类型'] = 1
# 将整理后的数据保存到新的Excel文件中
new_df.to_excel(OUTPUT_MC_PATH, index=False)
print('LP明细数据处理完成')
def ccPerson(df):
print('CC提成数据开始处理')
# 创建新的DataFrame来存储整理后的数据
new_df = pd.DataFrame()
# 重命名列名
column_mapping = {
'工号': '系统ID',
'姓名': '销售姓名',
'总GMV': '销售额',
'提成比例': '提成比例',
'个人提成': '新签提成'
}
df.rename(columns=column_mapping, inplace=True)
# 复制工号、姓名列到新的DataFrame
new_df['系统ID'] = df['系统ID']
new_df['销售姓名'] = df['销售姓名']
# 处理销售额列
new_df['销售额'] = df['销售额'].astype(str).str.replace(',', '') # 去除逗号
new_df['销售额'] = df['销售额'].astype(float).round(0).astype(int) # 四舍五入并转为整数
new_df['销售量'] = 0
# 处理提成比例列
new_df['提成比例'] = df['提成比例'].astype(str).str.rstrip('%').astype(float).round(4)
# 处理新签提成列
new_df['新签提成'] = df['新签提成'].astype(str).str.replace(',', '') # 去除逗号
new_df['新签提成'] = df['新签提成'].astype(float).round(0).astype(int) # 四舍五入并转为整数
new_df['归属月份'] = split[-2]
# 按照工号升序排列
new_df.sort_values(by='系统ID', inplace=True)
# 将整理后的数据保存到新的Excel文件中
new_df.to_excel(OUTPUT_CC_PERSON, index=False)
print('CC提成数据处理完成')
def ccOrder(df):
print('CC明细数据开始处理')
# 创建新的DataFrame来存储整理后的数据
new_df = pd.DataFrame()
# 重命名列名
column_mapping = {
'订单ID': '订单ID',
'学生ID': '学生ID',
'cc_id': '销售ID',
'cc': '销售',
'下单时间': '支付日期',
# '下单日期': '支付日期',
'实际支付金额': '金额'
}
df.rename(columns=column_mapping, inplace=True)
# 复制其他列到新的DataFrame
new_df['订单ID'] = df['订单ID']
new_df['学生ID'] = df['学生ID']
new_df['销售ID'] = df['销售ID']
new_df['销售'] = df['销售']
new_df['支付日期'] = df['支付日期'].astype(str)
new_df['支付日期'] = new_df['支付日期'].str.replace('\.0$', '', regex=True)
new_df['金额'] = df['金额']
new_df['归属月份'] = split[-2]
new_df['退费'] = None
# 将整理后的数据保存到新的Excel文件中
new_df.to_excel(OUTPUT_CC_ORDER, index=False)
print('CC明细数据处理完成')
# 读取 Excel 文件
xlsx = pd.ExcelFile(SOURCE_FILE_PATH)
# 遍历每个 sheet
for sheet_name in xlsx.sheet_names:
# 读取当前 sheet 的数据
df = pd.read_excel(xlsx, sheet_name=sheet_name)
if sheet_name == 'LP明细':
mc(df)
elif sheet_name == 'CC提成':
ccPerson(df)
elif sheet_name == 'CC明细':
ccOrder(df)
else:
print('无效的sheet')
总结
在日常工作中,有很多提升效率的手段,若能合理的运用,即能达成事半功倍的效果。