Python代碼輕松實現(xiàn)Excel兩列數(shù)據(jù)對比
在日常的辦公與數(shù)據(jù)分析工作中,我們經(jīng)常會遇到這樣的需求:核對Excel表格中的兩列數(shù)據(jù),找出它們的差異或相同點。雖然Excel自帶的 VLOOKUP 函數(shù)或條件格式也能解決部分問題,但當(dāng)數(shù)據(jù)量龐大、對比邏輯復(fù)雜,或者你需要進(jìn)行自動化處理時,Python 無疑是更高效、更強(qiáng)大的選擇。
本文將以完全零基礎(chǔ)的視角,帶你一步步使用Python完成Excel中兩列數(shù)據(jù)的對比。我們將使用Python中最強(qiáng)大的數(shù)據(jù)處理庫——pandas。
1. 準(zhǔn)備工作 (Prerequisites)
在開始編寫代碼之前,我們需要準(zhǔn)備好開發(fā)環(huán)境和測試數(shù)據(jù)。
1.1 安裝Python與必要的第三方庫
確保你的電腦上已經(jīng)安裝了Python。接下來,我們需要安裝兩個關(guān)鍵的庫:
- pandas:用于數(shù)據(jù)處理和分析的核心庫。
- openpyxl:用于讀取和寫入
.xlsx格式的Excel文件。
打開你的命令行工具(Windows用戶打開CMD或PowerShell,Mac用戶打開終端 Terminal),輸入以下命令并回車:
pip install pandas openpyxl
1.2 準(zhǔn)備測試數(shù)據(jù)
為了方便演示,請在你的電腦桌面上新建一個名為 data.xlsx 的Excel文件,并在其中創(chuàng)建兩列數(shù)據(jù),表頭分別為 列A 和 列B:
| 列A | 列B |
|---|---|
| 蘋果 | 蘋果 |
| 香蕉 | 橘子 |
| 葡萄 | 葡萄 |
| 芒果 | 芒果 |
| 西瓜 | 菠蘿 |
將該文件保存在與你即將編寫的Python腳本相同的文件夾目錄下。
2. 分步操作指南 (Step-by-Step Guide)
我們將通過四個簡單的步驟,完成數(shù)據(jù)的讀取、對比和結(jié)果導(dǎo)出。
步驟 1:導(dǎo)入庫并讀取Excel文件
首先,我們需要讓Python“看到”我們的Excel數(shù)據(jù)。
import pandas as pd
# 讀取Excel文件
# 注意:確保 data.xlsx 與你的Python代碼在同一個文件夾
df = pd.read_excel('data.xlsx')
# 打印數(shù)據(jù),檢查是否讀取成功
print("原始數(shù)據(jù):")
print(df)
步驟 2:基礎(chǔ)對比(判斷同行數(shù)據(jù)是否一致)
最常見的需求是:檢查同一行中,列A 和 列B 的數(shù)據(jù)是否完全一樣。我們可以在表格后面新增一列 對比結(jié)果 來顯示。
# 判斷列A和列B是否相等,結(jié)果會生成 True 或 False
df['對比結(jié)果'] = df['列A'] == df['列B']
# 為了讓結(jié)果更直觀,我們可以將 True/False 替換為中文描述
df['對比結(jié)果'] = df['對比結(jié)果'].map({True: '相同', False: '不同'})
print("\n同行對比后的數(shù)據(jù):")
print(df)
步驟 3:交叉對比(找出一列中有,另一列中沒有的數(shù)據(jù))
有時候,數(shù)據(jù)不是按行對應(yīng)的。我們想知道:列A中存在,但列B中不存在的數(shù)據(jù)有哪些?
# 使用 isin() 函數(shù)判斷列A的數(shù)據(jù)是否在列B中
# ~ 符號表示“取反”(即不存在于列B中)
diff_A_not_in_B = df[~df['列A'].isin(df['列B'])]
print("\n在列A中但不在列B中的數(shù)據(jù):")
print(diff_A_not_in_B['列A'].tolist())
步驟 4:將結(jié)果導(dǎo)出為新的Excel文件
處理完數(shù)據(jù)后,我們需要將結(jié)果保存下來,而不是僅僅打印在屏幕上。
# 將包含對比結(jié)果的 DataFrame 保存為新的 Excel 文件
# index=False 表示不保存行索引(即最左側(cè)的 0, 1, 2, 3...)
df.to_excel('result.xlsx', index=False)
print("\n對比完成!結(jié)果已保存至 result.xlsx")
完整代碼 (Complete Code)
將以上步驟整合,你可以直接復(fù)制以下代碼運(yùn)行:
import pandas as pd
def compare_excel_columns():
# 1. 讀取數(shù)據(jù)
print("正在讀取數(shù)據(jù)...")
df = pd.read_excel('data.xlsx')
# 2. 清理數(shù)據(jù)(去除不可見的空格,防止比對出錯)
df['列A'] = df['列A'].astype(str).str.strip()
df['列B'] = df['列B'].astype(str).str.strip()
# 3. 同行比對
df['同行是否相同'] = df['列A'] == df['列B']
df['同行是否相同'] = df['同行是否相同'].map({True: '相同', False: '不同'})
# 4. 交叉比對
df['是否在列B中存在'] = df['列A'].isin(df['列B']).map({True: '存在', False: '不存在'})
# 5. 導(dǎo)出結(jié)果
df.to_excel('result.xlsx', index=False)
print("對比完成!請查看當(dāng)前目錄下的 result.xlsx 文件。")
if __name__ == "__main__":
compare_excel_columns()
3. 常見踩坑與注意事項 (Common Pitfalls)
對于新手來說,即使代碼完全正確,也可能因為數(shù)據(jù)本身的問題導(dǎo)致對比結(jié)果不符合預(yù)期。以下是三個最常見的“坑”:
1.隱藏的空格 (Leading/Trailing Spaces):在Excel中錄入數(shù)據(jù)時,很容易不小心多敲一個空格。計算機(jī)在對比時,"蘋果" 和 "蘋果 "(帶空格)會被認(rèn)為是完全不同的兩個詞。
解決方案: 在對比前,使用 .str.strip() 方法去除字符串兩端的空格(如上方完整代碼中的步驟2所示)。
2.大小寫敏感 (Case Sensitivity):對于英文字母,Python默認(rèn)是區(qū)分大小寫的(Apple 不等于 apple)。
解決方案: 可以在對比前將所有字母統(tǒng)一轉(zhuǎn)換為小寫:df['列A'].str.lower() == df['列B'].str.lower()。
3.數(shù)據(jù)類型不一致 (Data Type Mismatch):有時候列A中的 123 是數(shù)字類型,而列B中的 123 是文本類型。這會導(dǎo)致對比結(jié)果為“不同”。
解決方案: 在對比前,使用 .astype(str) 強(qiáng)制將兩列都轉(zhuǎn)換為字符串格式。
4. 總結(jié)與學(xué)習(xí)資源 (Conclusion & Resources)
通過本文,你已經(jīng)掌握了如何使用Python和 pandas 庫來讀取Excel文件、進(jìn)行同行的精準(zhǔn)對比、交叉查找差異,并將最終結(jié)果導(dǎo)出。相比于手動核對,Python不僅速度極快,還能徹底避免人為眼花的失誤。
當(dāng)你熟悉了這些基礎(chǔ)操作后,你可以嘗試處理擁有幾十萬行數(shù)據(jù)的表格,你會發(fā)現(xiàn)Python的運(yùn)行速度依然只需幾秒鐘。
到此這篇關(guān)于Python代碼輕松實現(xiàn)Excel兩列數(shù)據(jù)對比的文章就介紹到這了,更多相關(guān)Python Excel數(shù)據(jù)對比內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python讀寫Excel大數(shù)據(jù)文件的3種有效方式對比
- Python實現(xiàn)Excel數(shù)據(jù)對比的實用方案
- Python中處理Excel數(shù)據(jù)的方法對比(pandas和openpyxl)
- 使用Python開發(fā)Excel表格數(shù)據(jù)對比工具
- 利用Python實現(xiàn)去重聚合Excel數(shù)據(jù)并對比兩份數(shù)據(jù)的差異
- Python實現(xiàn)對比兩個Excel數(shù)據(jù)內(nèi)容并標(biāo)記出不同
- 詳解Python如何實現(xiàn)對比兩個Excel數(shù)據(jù)差異
相關(guān)文章
python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法
今天小編就為大家分享一篇python pcm音頻添加頭轉(zhuǎn)成Wav格式文件的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python Pydantic數(shù)據(jù)驗證的實現(xiàn)
本文主要介紹了Python Pydantic數(shù)據(jù)驗證的實現(xiàn)2025-04-04
Python中的filter()函數(shù)的3種使用方式詳解
Python + selenium自動化環(huán)境搭建的完整步驟
python類別數(shù)據(jù)數(shù)字化LabelEncoder?VS?OneHotEncoder區(qū)別
深入理解Python?@dataclass的內(nèi)部原理
python GUI庫圖形界面開發(fā)之PyQt5 MDI(多文檔窗口)QMidArea詳細(xì)使用方法與實例

