实现如下功能:找到相同数据,并删除相同数据所在的行。1生成新的文件。2将删除的数据存为另一个文件。
import pandas as pd
import os
def process_excel(input_file_path, output_file_path, deleted_rows_file_path):
"""
读取Excel文件,删除含有任何重复数据的行,并保存处理后的数据到新的Excel文件。
同时,将删除的行汇总到另一个新文件中。
:param input_file_path: 输入Excel文件的路径
:param output_file_path: 输出处理后的Excel文件的路径
:param deleted_rows_file_path: 删除行汇总的Excel文件的路径
"""
try:
# 读取Excel文件
df = pd.read_excel(input_file_path)
# 定义一个函数来检查每行是否有重复的数据
def has_duplicate_data(row, all_rows):
for value in row:
if pd.isna(value):
continue # 跳过空值
if isinstance(value, (int, float)) and any((value in other_row and not pd.isna(other_value)) for other_row, other_value in zip(all_rows, row)):
return True
return False
# 应用函数,筛选出没有重复数据的行
df_filtered = df[~df.apply(lambda row: has_duplicate_data(row, df.values), axis=1)]
# 收集所有被删除的行
df_deleted = df[df.apply(lambda row: has_duplicate_data(row, df.values), axis=1)]
# 保存处理后的数据到新的Excel文件
df_filtered.to_excel(output_file_path, index=False)
print(f"处理后的数据已保存至 {output_file_path}")
# 保存删除的行到另一个Excel文件
df_deleted.to_excel(deleted_rows_file_path, index=False)
print(f"删除的行已保存至 {deleted_rows_file_path}")
except FileNotFoundError:
print(f"文件未找到:{input_file_path}")
except Exception as e:
print(f"处理文件时发生错误:{e}")
def main():
input_file_path = r'G:\个人文件\ceshi\测试表.xlsx'
output_file_path = r'G:\个人文件\ceshi\sd_unique.xlsx'
deleted_rows_file_path = r'G:\个人文件\ceshi\deleted_rows.xlsx'
process_excel(input_file_path, output_file_path, deleted_rows_file_path)
if __name__ == "__main__":
main()
这段代码通过定义一个函数 process_excel 来读取Excel文件,删除含有重复数据的行,并将处理后的数据和删除的行分别保存到不同的Excel文件中。同时,它还处理了文件不存在和其他可能的异常情况。