最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

首先安裝必要的庫:

pip install pandas openpyxl

基于Pandas的智能對比方案

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

import pandas as pd
from datetime import datetime

def compare_excel_sheets(file1, file2, key_columns, compare_columns):
    """
    智能對比兩個Excel文件
    :param file1: 第一個文件路徑
    :param file2: 第二個文件路徑  
    :param key_columns: 關(guān)鍵列列表,用于匹配行
    :param compare_columns: 需要對比的列列表
    """
    
    # 讀取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,
            '詳情': '存在于第一個文件但第二個文件缺失'
        })
    
    for key in only_in_df2:
        differences.append({
            '類型': '新增行', 
            '關(guān)鍵值': key,
            '詳情': '存在于第二個文件但第一個文件缺失'
        })
    
    # 對比共同行的字段差異
    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
                })
    
    # 生成對比報告
    report_df = pd.DataFrame(differences)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    report_file = f"對比報告_{timestamp}.xlsx"
    
    with pd.ExcelWriter(report_file) as writer:
        report_df.to_excel(writer, sheet_name='差異詳情', index=False)
        
        # 添加統(tǒng)計信息
        stats = {
            '對比時間': [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)計摘要', index=False)
    
    return report_file

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

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

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

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

def memory_efficient_compare(file1, file2, key_column):
    """分塊讀取對比,節(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)分塊對比邏輯
            merged = pd.merge(chunk1, chunk2, on=key_column, how='outer', indicator=True)
            differences = merged[merged['_merge'] != 'both']
            results.append(differences)
    
    return pd.concat(results)

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

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

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

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

相關(guān)文章

  • python實(shí)現(xiàn)騰訊滑塊驗(yàn)證碼識別

    python實(shí)現(xiàn)騰訊滑塊驗(yàn)證碼識別

    這篇文章主要介紹了python如何實(shí)現(xiàn)騰訊滑塊驗(yàn)證碼識別,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • Python使用pyyaml模塊處理yaml數(shù)據(jù)

    Python使用pyyaml模塊處理yaml數(shù)據(jù)

    這篇文章主要介紹了Python使用pyyaml模塊處理yaml數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-04-04
  • Python實(shí)現(xiàn)的簡單讀寫csv文件操作示例

    Python實(shí)現(xiàn)的簡單讀寫csv文件操作示例

    這篇文章主要介紹了Python實(shí)現(xiàn)的簡單讀寫csv文件操作,結(jié)合實(shí)例形式分析了Python使用csv模塊針對csv文件進(jìn)行讀寫操作的相關(guān)實(shí)現(xiàn)技巧與注意事項,需要的朋友可以參考下
    2018-07-07
  • 數(shù)據(jù)庫連接池DBUtils的安裝使用方法

    數(shù)據(jù)庫連接池DBUtils的安裝使用方法

    DBUtils是Python的一個用于實(shí)現(xiàn)數(shù)據(jù)庫連接池的模塊,這篇文章主要介紹了數(shù)據(jù)庫連接池DBUtils的安裝使用方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • 如何通過python實(shí)現(xiàn)IOU計算代碼實(shí)例

    如何通過python實(shí)現(xiàn)IOU計算代碼實(shí)例

    這篇文章主要介紹了如何通過python實(shí)現(xiàn)IOU計算代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • win10 64bit下python NLTK安裝教程

    win10 64bit下python NLTK安裝教程

    這篇文章主要為大家詳細(xì)介紹了win10 64bit下python NLTK安裝教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • Python中time.sleep(0.001)是否真的只等待1毫秒

    Python中time.sleep(0.001)是否真的只等待1毫秒

    這篇文章主要介紹了Python中time.sleep(0.001)是否真的只等待1毫秒,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python游戲開發(fā)實(shí)例之graphics實(shí)現(xiàn)AI五子棋

    Python游戲開發(fā)實(shí)例之graphics實(shí)現(xiàn)AI五子棋

    五子棋是經(jīng)典的棋牌類游戲,很多人都玩過,那么如何用Python實(shí)現(xiàn)五子棋呢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Python批量發(fā)送post請求的實(shí)現(xiàn)代碼

    Python批量發(fā)送post請求的實(shí)現(xiàn)代碼

    昨天學(xué)了一天的Python(我的生產(chǎn)語言是java,也可以寫一些shell腳本,算有一點(diǎn)點(diǎn)基礎(chǔ)),今天有一個應(yīng)用場景,就正好練手了
    2018-05-05
  • Python?tkinter庫入門與進(jìn)階之構(gòu)建精美用戶界面

    Python?tkinter庫入門與進(jìn)階之構(gòu)建精美用戶界面

    Tkinter是Python的標(biāo)準(zhǔn)GUI(圖形用戶界面)庫,基于Tcl/Tk構(gòu)建,無需額外安裝即可在大多數(shù)Python環(huán)境中使用,這篇文章主要介紹了Python?tkinter庫入門與進(jìn)階之構(gòu)建精美用戶界面的相關(guān)資料,需要的朋友可以參考下
    2025-12-12

最新評論

金秀| 东乡县| 西峡县| 松溪县| 桂东县| 遵化市| 台湾省| 喀喇沁旗| 汤阴县| 滦南县| 陆良县| 木兰县| 镇沅| 虎林市| 通榆县| 太白县| 阿拉善左旗| 鹤峰县| 莱芜市| 石家庄市| 宜兰市| 额尔古纳市| 长阳| 榕江县| 黄浦区| 平邑县| 诸暨市| 潞西市| 东城区| 海城市| 出国| 唐河县| 德格县| 双峰县| 紫金县| 墨竹工卡县| 河西区| 清涧县| 林口县| 陈巴尔虎旗| 尼勒克县|