欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)Excel數(shù)據(jù)對(duì)比的實(shí)用方案

 更新時(shí)間:2025年08月29日 10:30:22   作者:一線碼農(nóng)1024  
經(jīng)常需要對(duì)比兩個(gè)Excel表格的差異,無(wú)論是財(cái)務(wù)對(duì)賬、庫(kù)存盤(pán)點(diǎn)還是數(shù)據(jù)遷移,快速準(zhǔn)確地找出數(shù)據(jù)差異都能節(jié)省大量時(shí)間,今天分享用Python實(shí)現(xiàn)Excel數(shù)據(jù)對(duì)比的實(shí)用方案,需要的朋友可以參考下

核心思路與準(zhǔn)備工作

對(duì)比Excel數(shù)據(jù)的關(guān)鍵在于選擇合適的比對(duì)維度。通常我們會(huì)基于唯一標(biāo)識(shí)列(如訂單號(hào)、產(chǎn)品ID)進(jìn)行關(guān)聯(lián)比對(duì),然后檢查其他字段的差異。

首先安裝必要的庫(kù):

pip install pandas openpyxl

基于Pandas的智能對(duì)比方案

以下是一個(gè)完整的雙表對(duì)比實(shí)現(xiàn):

import pandas as pd
from datetime import datetime

def compare_excel_sheets(file1, file2, key_columns, compare_columns):
    """
    智能對(duì)比兩個(gè)Excel文件
    :param file1: 第一個(gè)文件路徑
    :param file2: 第二個(gè)文件路徑  
    :param key_columns: 關(guān)鍵列列表,用于匹配行
    :param compare_columns: 需要對(duì)比的列列表
    """
    
    # 讀取Excel文件
    df1 = pd.read_excel(file1)
    df2 = pd.read_excel(file2)
    
    # 設(shè)置索引以便比較
    df1_set = df1.set_index(key_columns)
    df2_set = df2.set_index(key_columns)
    
    # 找出所有差異
    differences = []
    
    # 檢查新增和刪除的行
    common_keys = df1_set.index.intersection(df2_set.index)
    only_in_df1 = df1_set.index.difference(df2_set.index)
    only_in_df2 = df2_set.index.difference(df1_set.index)
    
    # 記錄增刪情況
    for key in only_in_df1:
        differences.append({
            '類型': '刪除行',
            '關(guān)鍵值': key,
            '詳情': '存在于第一個(gè)文件但第二個(gè)文件缺失'
        })
    
    for key in only_in_df2:
        differences.append({
            '類型': '新增行', 
            '關(guān)鍵值': key,
            '詳情': '存在于第二個(gè)文件但第一個(gè)文件缺失'
        })
    
    # 對(duì)比共同行的字段差異
    for key in common_keys:
        row1 = df1_set.loc[key]
        row2 = df2_set.loc[key]
        
        for col in compare_columns:
            val1 = row1[col]
            val2 = row2[col]
            
            # 處理NaN值和正常值的比較
            if pd.isna(val1) and pd.isna(val2):
                continue
            elif pd.isna(val1) or pd.isna(val2) or val1 != val2:
                differences.append({
                    '類型': '數(shù)據(jù)變更',
                    '關(guān)鍵值': key,
                    '字段': col,
                    '文件1值': val1,
                    '文件2值': val2
                })
    
    # 生成對(duì)比報(bào)告
    report_df = pd.DataFrame(differences)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    report_file = f"對(duì)比報(bào)告_{timestamp}.xlsx"
    
    with pd.ExcelWriter(report_file) as writer:
        report_df.to_excel(writer, sheet_name='差異詳情', index=False)
        
        # 添加統(tǒng)計(jì)信息
        stats = {
            '對(duì)比時(shí)間': [timestamp],
            '總差異數(shù)': [len(differences)],
            '新增行數(shù)': [len(only_in_df2)],
            '刪除行數(shù)': [len(only_in_df1)],
            '數(shù)據(jù)變更數(shù)': [len(differences) - len(only_in_df1) - len(only_in_df2)]
        }
        pd.DataFrame(stats).to_excel(writer, sheet_name='統(tǒng)計(jì)摘要', index=False)
    
    return report_file

# 使用示例
if __name__ == "__main__":
    result_file = compare_excel_sheets(
        file1='銷(xiāo)售數(shù)據(jù)_月初.xlsx',
        file2='銷(xiāo)售數(shù)據(jù)_月末.xlsx',
        key_columns=['訂單編號(hào)'],  # 基于訂單號(hào)進(jìn)行匹配
        compare_columns=['客戶名稱', '產(chǎn)品數(shù)量', '訂單金額', '發(fā)貨狀態(tài)']
    )
    
    print(f"對(duì)比完成,報(bào)告已保存至: {result_file}")

關(guān)鍵優(yōu)勢(shì):這種方法不僅能找出數(shù)據(jù)值的差異,還能識(shí)別行的新增和刪除,并提供詳細(xì)的變更記錄。

處理大型文件的優(yōu)化技巧

當(dāng)處理大型Excel文件時(shí),需要考慮內(nèi)存優(yōu)化:

def memory_efficient_compare(file1, file2, key_column):
    """分塊讀取對(duì)比,節(jié)省內(nèi)存"""
    chunksize = 10000
    results = []
    
    for chunk1 in pd.read_excel(file1, chunksize=chunksize):
        for chunk2 in pd.read_excel(file2, chunksize=chunksize):
            # 實(shí)現(xiàn)分塊對(duì)比邏輯
            merged = pd.merge(chunk1, chunk2, on=key_column, how='outer', indicator=True)
            differences = merged[merged['_merge'] != 'both']
            results.append(differences)
    
    return pd.concat(results)

對(duì)于需要快速對(duì)比兩個(gè)excel表中的不同但又不想寫(xiě)代碼的場(chǎng)景,推薦使用專業(yè)工具如https://www.nimail.cn/dev-tool/excel-compare.html,這類工具通常提供可視化界面和更強(qiáng)大的對(duì)比功能。

實(shí)際項(xiàng)目中,建議先將對(duì)比邏輯封裝成可重用的函數(shù),然后根據(jù)具體業(yè)務(wù)需求進(jìn)行調(diào)整。比如財(cái)務(wù)系統(tǒng)可能需要特別關(guān)注金額字段的精度,而庫(kù)存系統(tǒng)可能需要關(guān)注數(shù)量的變化趨勢(shì)。

通過(guò)Python實(shí)現(xiàn)Excel數(shù)據(jù)對(duì)比,不僅能夠自定義對(duì)比規(guī)則,還能將對(duì)比過(guò)程集成到自動(dòng)化流程中,大幅提升數(shù)據(jù)處理效率。記得在處理重要數(shù)據(jù)前做好備份,并在生產(chǎn)環(huán)境中添加充分的異常處理機(jī)制。

到此這篇關(guān)于Python實(shí)現(xiàn)Excel數(shù)據(jù)對(duì)比的實(shí)用方案的文章就介紹到這了,更多相關(guān)Python Excel數(shù)據(jù)對(duì)比內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論