0
点赞
收藏
分享

微信扫一扫

实现python自动化进行薪资核算——数据读取、数据计算、数据输出

前言

上一篇文章我们完成了相关准备工作——pandas库的安装以及相关库问题的解决,这篇文章实现简单的薪资核算工作。

功能要求

  • 当前表格中,考勤扣除金额、个税扣除、实发工资目前是空缺的,最终生成的数据需要将上述三列的数据分别根据以下规则填充。

1、迟到次数核算方法:

  • 3次以内不扣除
  • 3次以上每多1次扣除100(也就是第4次开始)

2、个税扣除核算方法:

个税扣除 = 基础工资 - 五险一金扣除 - 考勤扣除金额,然后进行以下方式核算:

  • 不考虑个税起征点。
  • 收入中不超过3000元的按3%税率缴纳个税。
  • 3000元-12000元的按10%税率缴纳个税。
  • 超过12000元不高于25000元的按税率20%计算。
  • 25000元-35000元的按税率25%计算。
  • 35000元-55000元的按税率30%计算。
  • 55000元-80000元的按税率35%计算。

3、将算出的结果填充到.xlsx文件中

  • 考前扣除金额填充至原文件中。
  • 个税扣除填充至原文件中。
  • 实发工资填充至原文件中。

大致思路

上一篇文章提到了实现该功能需要编写的python程序有:数据的读取、数据的计算、数据的输出。想要实现如下功能,需要掌握一些知识点。

数据的读取

python中提供了很多方便的数据读取函数,在之前的文章中(python学习——第十五弹)详细给大家介绍如何在python中读取文件并写入数据到文件中:

file=open('b.txt','a')#采用追加的方式打开文件b.txt
file.write('hello')

file.flush()  #把缓冲区的内容写入到文件中,但是不关闭文件
file.write('world')#在文件中写入world

file.close()#关闭文件

或者是采用with语句进行文件的读写操作,并且为避免执行过程中遇到的“错误”导致程序运行异常,还搭配了try…except 语句进行异常信息打印:

try:

    with open("a.txt") as f:

            a=1/0 #异常操作

            print(f.readlines())#读取文件信息

except Exception as error:#如果出现异常就打印出异常信息

    print(error)

finally:

    f.close()

那么在进行xlsx文件进行读取信息时,我们需要用到:

#读取Excel表格,指定sheet_name为‘Sheet1’
df = pd.read_excel('salary_1.xlsx',sheet_name='Sheet1')

数据的计算

计算考勤扣除金额

这里我们使用apply()方法实现对可迭代对象的批量操作,并搭配lambda函数作为aapply()方法的参数,从而实现对代码的简化。

使用lambda函数对迟到次数所扣除的金额进行计算:

lambda函数接收一个参数x,然后计算(x-3)*100的值。如果结果大于零,就返回该值;否则就返回0:

late_counts = df['迟到次数']

df['考勤扣除金额'] = late_counts.apply(lambda x :max((x-3)*100,0))

计算个税扣除

以第一个if。。。else语句为例:

将lambda函数作为apply()方法的一个参数,lambda函数接收一个x值,并对x值施加规则进行计算如果x值()不超过3000,就按照3%的税率缴纳个税,如果x*0.03小于90,则返回x*0.03;否则返回90;如果x>3000就进入下一个判断条件,以此类推。

# 计算个税扣除

taxable_incom = df['工资基数'] - df['五险一金扣除'] - df['考勤扣除金额']

df['个税扣除'] = taxable_incom.apply(lambda x:

    min(x*0.03,90) if x<=3000 else

    min(x*0.1,210) if 3000<x<=12000 else

    min(x*0.2,1410) if 12000<x<=25000 else

    min(x*0.25,2660) if 25000<x<=35000 else

    min(x*0.3,4410) if 35000<x<=55000 else

    min(x*0.35,7160) if 55000<x<=80000 else

    x*0.45
)


填充实发工资

# 填充实发工资
df['实发工资'] = df['工资基数'] - df['五险一金扣除'] - df['考勤扣除金额']-df[‘个数扣除’]

数据的输出

前面两步的工作完成之后,就需要将整理好的数据再次写入到xlsx表格中并以xlsx形式输出,这时需要用到:

writer = pd.ExcelWriter('salary_output.xlsx')
df.to_excel(writer, 'Sheet1', index=False)
writer.close()

完整代码

import pandas as pd

#读取Excel表格,指定sheet_name
df = pd.read_excel('salary_1.xlsx',sheet_name='Sheet1')


# 计算考勤扣除金额
late_counts = df['迟到次数']
df['考勤扣除金额'] = late_counts.apply(lambda x :max((x-3)*100,0))

# 计算个税扣除
taxable_incom = df['工资基数'] - df['五险一金扣除'] - df['考勤扣除金额']
df['个税扣除'] = taxable_incom.apply(lambda x:

    min(x*0.03,90) if x<=3000 else

    min(x*0.1,210) if 3000<x<=12000 else

    min(x*0.2,1410) if 12000<x<=25000 else

    min(x*0.25,2660) if 25000<x<=35000 else

    min(x*0.3,4410) if 35000<x<=55000 else

    min(x*0.35,7160) if 55000<x<=80000 else

    x*0.45
)


# 填充实发工资

df['实发工资'] = df['工资基数'] - df['五险一金扣除'] - df['考勤扣除金额']-df['个税扣除']

writer = pd.ExcelWriter('salary_output.xlsx')

df.to_excel(writer, 'Sheet1', index=False)

writer.close()

print('结果已经成功写表格!')

最终效果

可以看到在所运行该文件的同一目录下出现了一个名为salary_output.xlsx的文件,打开后我们看到最红呈现的结果是没问题的。

实现python自动化进行薪资核算——数据读取、数据计算、数据输出_python

实现python自动化进行薪资核算——数据读取、数据计算、数据输出_读取文件_02

总结

以上利用python实现简易的自动化薪资核算功能就完成了,大致思路还是很简单易懂的。如有不足,感谢指正!


举报

相关推荐

0 条评论