python pandas对社保数据进行整理整合

2022-10-25 13:54:06 浏览数 (2)

本文是自己工作中用到的代码,

用的到知识点有

  1. DataFrame.read_excel,to_excel
  2. iloc
  3. dropna
  4. 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())

代码解析:

  1. 先用df读取“四险”的数据,
  2. 再用第四列中含有“"2049867-佛山市XXXXX"”的全部取出,如果没有的就删除,这一步可以删除重复的合并单元形式的每隔几行就有的烦人的标题,
  3. 用再.iloc[取所有的行数据,【取出指定的列的数据】],
  4. 再添加上标题,这里文字太多了,我就用了字母,只是“社会保障号”用文字,与下面的一致
  5. 再导入“养老与职业年金的。xlsx”数据
  6. mydata=mydata[mydata[4]=="2049867-XXXXXXX"]到第四列中有“***”的数据行的数据,这可以删除烦人的标题
  7. mydata=mydata.dropna(axis=1,how='all')删除整列为0的数据
  8. 添加标题
  9. d_total=mydata.merge(df,on='社会保障号')利用“社会保障号”为识别进行数据的合并。
  10. 输出到为Excel文件, ================= python的数据清洗很强大 ====今天就学习到此====

0 人点赞