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))