本文是自己工作中用到的代码,
用的到知识点有
- DataFrame.read_excel,to_excel
- iloc
- dropna
- merge
吐槽一下社保导出的文件,:
1.社保现在分开个系统购买,导出来的文件有两个,一个是养老保险与职业年金,一个是医疗保险、失业保险、工伤保险、生育保险(但是其他两个的标题也有但数据为0)
2.前面几列是没数据的
3.有大量的合并单元格,又是不规则的,注意是“大量的”“不规则的”
4.每22个数据就来一几行标题
我们每次要查找一个数据,用Ctrl F,输入查找都要很长时间。又要在两个文件中查找,
所以整理社保的数据是Excel使用者的一个挑战。
来吧,上代码
=====代码====
代码语言:javascript复制# -*- coding: utf-8 -*-
import pandas as pd
df=pd.read_excel('E:/G01社保/2019/201908XXXXX四险.xls',header=None)
df=df[df[4]=="2049867-佛山市XXXXX"]
df=df.iloc[:,[9,12,14,16,17,35,38,39,41,42,43,45,46,48,50,51,53,54,55,56,57,59,60,61,62]]
#df=df.dropna(axis=1,how='all')
df.columns=["社会保障号","姓名2","total","gr_sum","dw_sum","yl_to","yl_by_dw","yl_by_gr","yl_b_dw","yl_b_gr","sy_to","sy_by_dw","sy_by_gr","sy_b_dw","sy_b_gr","gs_to","gs_by_dw","gs_by_gr","gs_b_dw","gs_b_gr","sy_to","sy_by_dw","sy_by_gr","sy_b_dw","sy_b_gr"]
mydata=pd.read_excel('E:/G01社保/2019/201908XXXX养老保险和职业年金台账.xls',header=None)
mydata=mydata[mydata[4]=="2049867-XXXXXXX"]
mydata=mydata.dropna(axis=1,how='all')
mydata.columns=['序号','单位编号','个人编号','社会保障号','姓名','本月征收金额合计','个人缴费合计','单位缴费合计','养老合计','养老本月单位收','养老本月个人收','养老本月单位补','养老本月个人补','职业合计','职业本月单位收','职业本月个人收','职业本月单位补','职业本月个人补']
d_total=mydata.merge(df,on='社会保障号')
d_total.to_excel("dddd.xlsx",index=False)
#print(d_total.head())
代码解析:
- 先用df读取“四险”的数据,
- 再用第四列中含有“"2049867-佛山市XXXXX"”的全部取出,如果没有的就删除,这一步可以删除重复的合并单元形式的每隔几行就有的烦人的标题,
- 用再.iloc[取所有的行数据,【取出指定的列的数据】],
- 再添加上标题,这里文字太多了,我就用了字母,只是“社会保障号”用文字,与下面的一致
- 再导入“养老与职业年金的。xlsx”数据
- mydata=mydata[mydata[4]=="2049867-XXXXXXX"]到第四列中有“***”的数据行的数据,这可以删除烦人的标题
- mydata=mydata.dropna(axis=1,how='all')删除整列为0的数据
- 添加标题
- d_total=mydata.merge(df,on='社会保障号')利用“社会保障号”为识别进行数据的合并。
- 输出到为Excel文件, ================= python的数据清洗很强大 ====今天就学习到此====