借助Jezrael,我可以编辑python脚本:
import os
import glob
import pandas as pd
os.chdir("files")
extension = 'csv'
all_filenames = [i for i in glob.glob('*.{}'.format(extension))]
# combine all files in the folder
dfs_to_concat = []
for f in all_filenames:
df = pd.read_csv(f, sep=";")
df['file_identifier'] = [f] * len(df.index)
dfs_to_concat.append(df)
combined_csv = pd.concat(dfs_to_concat)
# remove duplicates
m1 = combined_csv.duplicated()
m2 = combined_csv.duplicated(subset=combined_csv.columns[:-1])
combined_csv_final = combined_csv[m1 | ~m2]
# export to csv
combined_csv_final.to_csv("combined_csv_final.csv", index=False, sep=";", encoding='utf-8-sig')
此脚本应该执行的操作是:
仅删除“ file_identifier”不同的所有重复行。不要删除“ file_identifier”相同的重复项。
但是,它不起作用。它不会删除具有不同文件标识符的重复行。实际上,它不会删除任何重复的行。
有人知道哪里出了问题吗?显然,在Jezraels示例中,它可以按预期工作。
答案 0 :(得分:2)
您可以将m1
中每个ech文件的测试重复项与没有最后一列的测试重复项结合起来,其中|
的{{1}}和bitwise OR
的反转掩码:
~
示例:
m1 = combined_csv.duplicated()
m2 = combined_csv.duplicated(subset=combined_csv.columns[:-1])
df = df[m1 | ~m2]