01
去重
我们使用Pandas库的drop_duplicates(subset=None, keep=‘first’, inplace=False)功能来对Excel文件中的重复项进行删除。
其中,subset参数代表指定列标记,默认当每一条行记录完全相同时,才会认定为重复行;keep=‘’有‘first’、‘last’和‘False’,意思是删除重复行时,保留first还是last还是全部删除,默认参数是‘first’;inplace=‘’有True和Flase,意思是直接替换还是保留副本,默认值是Flase。
读取Excel
import pandas as pd。
df = pd.read_excel('全部.xlsx')。
选中列去重
df.drop_duplicates(['用户名称'])。
其中第2、3行的用户名称与第0、1行重复,所以被删除。
03
保存最后一个重复数据
df.drop_duplicates(['用户名称'],keep='last')。
04
保存Excel
df.to_excel('去重后.xlsx')。
02
批量获取Excel文件
在上面我们已经学会如何对单个Excel文件去重了,但是在读取文件名的时候,我们还是需要手动输入的,如果文件很多的话,我们要一个一个的输入,这不仅麻烦,而且也不符合自动化办公的名头。所以,我们就需要想办法取得该目录下的所有Excel文件。
这里我们用的是Pathlib库,取得该目录下所有的xlsx格式文件。
path = 'K:\自动化办公'。
最简单的是,定义一个list(list可以装的元素数量应该是可以满足需求的,如果数据确实太高,考虑文件数量分组进行)
然后将所有文件的内容逐行读到这个list中,用list自带的去重方法listname=list(set(listname)),进行去重。
最后将整个List写入到d.txt中就可以了。
你的数据都是一行一行的吗?
是的话这样试试
input = open("a.txt", "r").read()。
output = open("b.txt", "w+")。
patterns = []
for line in input.split("\n"):。
if line not in patterns:。
print line。
patterns.append(line + "\n")。
for pattern in patterns:。
output.write(pattern)。
output.close()
测试了下满足你的输入输出
这是一个字符串的全角和半角的问题,可以导入 unicodedata 中的 normalize 函数先把全角转换为半角,然后再用 set 对列表去重,参考代码如下:
from unicodedata import normalize。
list3=['热菜','凉菜','凉菜','硬菜']。
set(map(lambda s: normalize('NFKC', s), list3))。
输出:
{'硬菜', '热菜', '凉菜'}。
扩展:
“ NFKC”代表“Normalization Form KC [Compatibility Decomposition, followed by Canonical Composition]”,并将全角字符替换为半角字符,这些半角字符与Unicode等价。