python使用xlwings处理excel中的身份证去重问题

excel中有一列身份证号码,现在要找出重复的。

身份证号是18位,excel的函数默认处理15位,这样就会导致前15位相同,后3位不同的身份证号码,也会被识别成重复的。

处理方法有:

一、在每个身份证号码后面加上一个英文字母,比如&a,然后用【开始】-【条件格式】-【突出显示单元格规则】-【重复值】-【确定】

二、使用函数countif,不过要注意使用通配符*才行,而且注意必须用英文状态下的双引号"*"。

countif(A:A,A2&"*")

这样值为1的,说明A2在A这一列只出现了一次,不重复。如果>1,重复。

三、使用xlwings

原理:使用python和xlwings,读取excel表中身份证号这一列数据,输出成列表。然后找出列表中的重复值。

#使用python和xlwings读取excel中的一列(这里是A列)数据,输出为列表
import xlwings as xw
app = xw.App(visible=False)  # 隐藏Excel
wb = app.books.open('身份证.xlsx')  # 打开工作簿
sht = wb.sheets['Sheet1']  # 实例化工作表

range_obj = sht.range('A1').expand('table')#身份证号码都在A列,有多行数据
rows_count = range_obj.rows.count#先获取A列的行数,注意它会停止计数在第一个空单元
print(rows_count)
columnd_data = sht.range('A2:A%s' % rows_count).value#将A列的每行数据输出至列表
print(columnd_data)

repeat_element = []
for i in columnd_data:
    if columnd_data.count(i) > 1:
        repeat_element.append(i)
print(set(repeat_element))

# nm=sht.range('A1').expand('down').last_cell.row#最下面一个连续非空单元格的行号
# print(nm)

wb.close()
app.quit()

说明几点:

1、excel表中,身份证号这一列需要是文本格式,可以使用【数据】-【分列】来转换

2、A列中的数据,不能有空单元格,即每行都要有身份证号,不能间隔出现空单元格。若有,可以先使用ctrl+g,定位空单元格,删除。

excel实例数据和程序运行结果如图:

 3、可以将去重后的列表,再写入excel表中,下一节再记录写入操作。

列表去重实现代码:

lists = [1,1,2,3,4,6,6,2,2,9]
lists = list(set(lists))

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值