当前位置:   article > 正文

Python自动化小技巧17——两张excel表对账,找不同的项目_python解决报表对账问题

python解决报表对账问题

案例背景

我们部门的资产台账和财务部门那边对不上,简单来说,我们这边有些资产项目财务那边没显示,财务那边有的资产我们这边没显示。

于是需要把我们这边的资产和财务那边的资产,两张表一个一个的资产进行比对....找不同

所以得用代码了。


代码实现

先导入包:

  1. import numpy as np
  2. import pandas as pd
  3. import matplotlib.pyplot as plt
  4. import seaborn as sns
  5. plt.rcParams ['font.sans-serif'] ='SimHei' #显示中文
  6. plt.rcParams ['axes.unicode_minus']=False #显示负号
  7. import xlrd

读取我们这边的资产数据:

  1. df=pd.read_excel('资产任意汇总表2.xls',converters={'资产类别': str},skiprows=2).iloc[:,2:]
  2. df=df.query("资产状态名称=='在用'").reset_index(drop=True)
  3. df.head(2)

 读取财务那边的数据:

  1. df_caiwu=pd.read_excel('资产任意汇总表2.xls',sheet_name='财务所有资产', converters={'资产编号': str})
  2. df_caiwu.head(2)

 (打码是怕信息泄露....)

这里还有一个需要处理的地方,就是财务这个表里面还有一些资产是报废了的,我们需要处理一下。但是由于这个表没有'资产是不是报废'这个类别的变量,使用得读取报废资产的表然后剔除他们....(工作中的实际项目就是这么复杂。。各种问题,需要进行各种对症的处理,学术上那种整理好的样例数据都太难得了)

  1. df_baofei=pd.read_excel('资产任意汇总表2.xls',sheet_name='财务已处置', converters={'资产编号': str})
  2. df_caiwu=df_caiwu[~df_caiwu['资产编号'].isin(list(df_baofei['资产编号'].unique()))]

如果财务的表中资产编号在报废资产里面的就是True,然后使用~进行反向掩码,报废掉的就是False,然后索引一下就可以剔除所有报废的资产了.....

两张表处理好后,我们开始进行对比找不同。这篇文章的核心就在下面这个自定义函数,这个函数的功能就类型数学集合,输入两个列表,返回他们各自特有的元素和共有的元素。

  1. def get_unique_elements(list1, list2):
  2. # 获取每个列表中的唯一元素
  3. set1 = set(list1) ; set2 = set(list2)
  4. unique_to_list1 = list(set1 - set2)
  5. unique_to_list2 = list(set2 - set1)
  6. common_elements = list(set1 & set2)
  7. return unique_to_list1, common_elements, unique_to_list2

然后获取两张表的资产编号 的各种元素和共有元素:

mask_taizhang,mask_gongyou,mask_caiwu=get_unique_elements(df['资产编号'].to_list(), df_caiwu['资产编号'].to_list())

三个列表,第一个是我们台账表里面的特有的资产编号,第二个是共同有的,第三个是财务那边特有的。

然后只需要像下面这样分别索引后就可以看到各种的资产了。

写入excel不同sheet里面

  1. with pd.ExcelWriter('财务和资产对不上情况.xlsx') as writer:
  2. df_temp=df[df['资产编号'].isin(mask_taizhang)]
  3. df_temp.to_excel(writer, sheet_name='资产台账特有', index=False)
  4. df_temp=df_caiwu[df_caiwu['资产编号'].isin(mask_gongyou)]
  5. df_temp.to_excel(writer, sheet_name='资产台账和财务共有', index=False)
  6. df_temp=df_caiwu[df_caiwu['资产编号'].isin(mask_caiwu)]
  7. df_temp.to_excel(writer, sheet_name='财务特有', index=False)

查看效果,还不错,3个sheet里面都分门别类出现了我们需要的:两张表特有的以及他们共有的资产项目。

 


查找原值不对上的

还没结束呢,就算是我们这边和财务那边对上的资产,可能只是编号一样,但是资产的原值可能不一样,还需要找找原值不一样的资产。

  1. df1=df_caiwu[df_caiwu['资产编号'].isin(mask_gongyou)][['资产编号','资产名称','资产原值','累计折旧']].set_axis(['财务编号','财务名称','财务原值','财务折旧'],axis='columns')
  2. df2=df[df['资产编号'].isin(mask_gongyou)][['资产编号','资产名称','原值','累计折旧']]
  3. df3=pd.merge(df1, df2 ,how='left',left_on='财务编号',right_on='资产编号')
  4. df3.loc[df3['财务原值'] != df3['原值']]

df1是财务那边找出共有的资产,df2是我们台账这边共有的资产,然后合并为df3

我们再寻找df3里面财务原值和我们台账原值不一样的资产。

这样就筛选出来了。


对不上的资产原值都是多少

还没完,领导:‘资产对不上的话,分别都是多少钱的资产对不上?’

我继续计算....

df[df['资产编号'].isin(mask_taizhang)][['原值','累计折旧']].sum()

这是计算我们台账这边的特有的资产的原值和折旧的总和。

然后还要算财务的特有的资产的原值和折旧的总和。

df_caiwu[df_caiwu['资产编号'].isin(mask_caiwu)][['资产原值','累计折旧']].sum()

然后再对比这个数据,原值和折旧都差多少....


然后领导还有很多很多的要求,总之都麻烦死了...其他的代码都不具有通用性我就不放上去。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/444213
推荐阅读
相关标签
  

闽ICP备14008679号