execl筛选去重_EXCEL之--巧用公式+筛选去除重复数据

平时除了vlookup(点击查看详解)外,恐怕被问起最多的就属去除重复数据了,重复数据产生的原因很多种,录入重复 、数据合并后重复等等。最后的数据形式就是有一个关键字重复或者整行数据都有重复。整行重复的,用高级筛选很容易去除,对于关键字重复,只需保留一行的情况 我这里有一个比较简便易学的办法,就是用辅助列公式处理, 网上有些用countif的不少做法 ,那样选出来的是所有重复数据, 而在有多个数据的关键字行留下一行, 需要手动去留下多个重复数据的一行, 我这里介绍的方法, 可以一次性筛选出所有非重复数据 ,而且留下重复数据中的一行。原理(能看懂就看,看不懂可忽略):首先对关键字进行排序,然后用match函数对当前行关键字对整列数据进行匹配,返回当前数据匹配到的行标。

当数据重复的时候 每个关键字就会匹配到第一个,所以当前辅助列公式返回的值就会不等于本行位置,这样就可以标识出非重复的关键字行,示例如下。

在去重列, ture即表示非重复数据, false即多余的重复数据, 然后利用自动筛选, 筛选出false行 删除即可得到非重复数据(或者筛选出ture复制到新表也可达到非重复数据)

当然,现在excel2007版本以上可以用系统提供的去重功能,但是看不到中间去重过程,我这个方法一是可以用在2003版本上,二就是理解透彻的话,结合其他公式可以更精准的控制去重。

2017-08-17 by excel880

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,你的代码已经能够读取多个 Excel 表格并合并了,但是有一个问题是,对于第一个 Excel 表格,你只保留了前两行,而对于其他的 Excel 表格,你却跳过了前两行。这就导致了合并后的 DataFrame 中,第一个 Excel 表格的数据行比其他 Excel 表格多了两行,从而引起了问题。 如果你希望保留第一个 Excel 表格的前两行,同时也保留其他 Excel 表格的所有数据行,可以将 skiprows 参数改为一个列表,如 [0, 1],这样第一个 Excel 表格的前两行会被保留,而其他 Excel 表格的前两行会被跳过。修改后的代码如下: ``` import pandas as pd # 读取第一个 Excel 表格的前两行数据 df1 = pd.read_excel('附件一:2022年12月末存量公司客户管户认领情况表__海沧-1.xlsx', header=[0, 1], nrows=2) # 定义一个空的 DataFrame,用于存储所有 Excel 表格的数据 result = pd.DataFrame() # 循环读取其他 Excel 表格的数据,保留第一行表的前两行,其余表跳过前两行,拼接到 result 中 for i, file in enumerate([ '附件三:2022年12月末存量机构客户管户认领情况表__海沧支行-1.xlsx', '附件二:2023年3月末新拓公司客户管户认领情况表__海沧-1.xlsx', '附件四:2023年3月末新拓机构客户管户认领情况表__海沧支行-1.xlsx' ]): skiprows = [0, 1] if i == 0 else 2 df = pd.read_excel(file, header=[0, 1], skiprows=skiprows) result = pd.concat([result, df], ignore_index=True) # 将第一个 Excel 表格的前两行和拼接后的所有数据合并,替换列名和行名中的特殊字符 df = pd.concat([df1, result], ignore_index=True) df.columns = [col.replace(' ', '_').replace(':', '_').replace('/', '_') for col in df.columns] df.index = [idx.replace(' ', '_').replace(':', '_').replace('/', '_') for idx in df.index] # 输出到新的 Excel 表格中 df.to_excel('new_file.xlsx', index=False) ``` 在代码中,使用了 enumerate() 函数来获取当前循环的表格序号 i,然后根据 i 的值来决定是否跳过前两行。对于第一个 Excel 表格,i 的值为 0,因此使用 [0, 1] 保留前两行;对于其他 Excel 表格,i 的值不为 0,因此跳过前两行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值