删除EXCEL表相同数值所在的行

实现如下功能:找到相同数据,并删除相同数据所在的行。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文件中。同时,它还处理了文件不存在和其他可能的异常情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值