python对excel表某一列去重

        其实第三方库pandas已经实现了这个功能, 但是为啥我还要自己重新写一个方法呢, 用过pandas你就会发现, 虽然可以去重, 但是最左边会莫名其妙多出一列序号, 好像这个去重方法还必须要传入去重列的字段名, 不能按列号去重, 最烦的是当对身份证号码去重时, 新生成的excel中身份证号码列竟变成了科学计数法....可能我是没有掌握pandas去重的要领吧, 算了, 自己动手造个轮子吧! 直接上代码:

import openpyxl

wb = openpyxl.load_workbook('C:/Users/Administrator/Desktop/a.xlsx')
ws = wb.worksheets[0]
print(ws.max_row)
ws.append(['a', 'b'])


def drop_duplicates(column):
    lst2 = []
    for i in range(1, ws.max_row):
        lst1 = list(ws.rows)[i - 1]
        for row in list(ws.rows)[i:]:
            lst2.append(row[column].value)
        if lst1[column].value in lst2:
            lst2 = []
            continue
        else:
            ws.append([r.value for r in lst1])
            lst2 = []

# 身份证格式化处理, 带表头的处理
def format_cardid(column):
    for index, row in enumerate(list(ws.rows)[1:]):
        if 'x' in row[column].value:
            ws.cell(index + 2, column + 1, row[column].value.replace('x', 'X'))

# 身份证格式化处理, 不带表头的处理
def format_cardid(column):
    for index, row in enumerate(list(ws.rows)):
        if 'x' in row[column].value:
            ws.cell(index + 1, column + 1, row[column].value.replace('x', 'X'))


drop_duplicates(6)
wb.save('C:/Users/Administrator/Desktop/a.xlsx')

        简单解释一下, 同样需要引用openpyxl包, 这里我用了和pandas里一样的函数名称, 传入要去重的列号即可, 注意:当身份证号码中存在x大小写时, 你需要统一, 否则不能去重, 在代码里我又加上了处理身份证格式化的代码, 把x统一格式化为X

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

phoenix3k

如果觉得满意,就请作者喝杯茶吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值