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

猜你喜欢

转载自blog.csdn.net/phoenix3k/article/details/125144490