2张Excel表,分别是不同日期的客户信息表,每份表大约有几万行,各列是每一个客户的账号、名称、证件号码、地址、电话等。抽几行数据看看:
现在,需要快速找出同一个账号的客户,其对应的法人姓名、证件号码或地址、电话等信息是否发生了变更(如,第二份表格红色单元格),按往常Excel表格处理,首先要打开表格,使用vlookup函数逐列对应进行调用、匹配,或者使用if两两判断是否相同,…最后再逐列筛选出变化的数据,复制粘贴后另保存…
等一下,利用Python的pandas数据处理,将两份表格存放在D盘文件夹测试数据的目录下,book1.xlsx和book2.xlsx,然后运行一下程序,几秒钟就筛选出结果了。先看看代码吧。
import pandas as pd
data1 = r'D:\测试数据\book1.xlsx' #指定一个表格,原始数据表
data2 = r'D:\测试数据\book2.xlsx' #指定一个表格,更新后的数据表
def compare_data(data1, data2):
# 读取两个表
dt1 = pd.read_excel(data1, sheet_name=0,dtype=object,na_rep="")#导入原始数据表
dt2 = pd.read_excel(data2, sheet_name=0,dtype=object,na_rep="")#导入更新后的数据表
# 确定需要进行对比的列,主key字段名
dt1_name = dt1['账号'].values.tolist()
dt2_name = dt2['账号'].values.tolist()
count = 0
for i in dt1_name:
if i in dt2_name:
dt1_row = dt1.loc[dt1['账号'] == i]
dt2_row = dt2.loc[dt2['账号'] == i]
# 可以选择不做比较的列
dt1_row_ = dt1_row.loc[:, dt1_row.columns.difference(['证件类型','数据日期'])]
dt2_row_ = dt2_row.loc[:, dt2_row.columns.difference(['证件类型','数据日期'])]
# 判断两行是否内容一致
if dt1_row_.equals(dt2_row_):
pass
else:
# count计数
count += 1
# 导入要保存的文件名,mode='a'可以控制连续写入csv文件。
#dt1_row.to_csv(r'D:\测试数据\test1.csv', index=False,mode='a', header=None,encoding='utf-8_sig')
dt2_row.to_csv(r'D:\测试数据\test2.csv',index=False,mode='a',header=None,encoding='utf-8_sig')
else:
print("匹配失败的账号:", i)
# 同理,可以反过来比较一下
for j in dt2_name:
if j not in dt1_name:
print("匹配失败的账号:", j)
print("匹配完成!")
print('测试不同的样本数为:', count)
compare_data(data1,data2)
就这样了,已经筛选出下面的新表格,保存在同一个文件夹中,新生成一个csv文件。看看是否满意。
>>>
==================== RESTART: D:/2021年报告/匹配两份表的单元格是否不同.py ====================
匹配失败的账号: 36020006
匹配失败的账号: 36020005
匹配完成!
测试不同的样本数为: 3
>>>
共发现了3个账户所对应的信息已发生了变更,如下表:
接下来,可以利用输出的名单作为监测目标,开展下一步的追踪工作…