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

