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

使用Python在Excel中實現(xiàn)自動查找并替換數(shù)據(jù)

 更新時間:2023年12月13日 11:21:13   作者:艾派森  
隨著項目的進展,需要經(jīng)常在Excel業(yè)務(wù)表格中查找及替換數(shù)據(jù),已保證數(shù)據(jù)與實際項目進度一致,手動一個一個查找,然后替換,效率太低,還容易遺漏,現(xiàn)在我們來試試用Python自動完成查找及替換吧,需要的朋友可以參考下

一、Python處理Excel

  • Python處理Excel的好處

1.批量操作:當(dāng)要處理眾多Excel文件時,例如出現(xiàn)重復(fù)性的手工勞動,那么使用Python就可以實現(xiàn)批量掃描文件、自動化進行處理,利用代碼代替手工重復(fù)勞動,實現(xiàn)自動化,是Python第一個比Excel強大的地方

2.大型文件,當(dāng)Excel文件超過幾十兆、甚至上百兆時,打開文件很慢、處理文件更加慢,這時候若使用Python,會發(fā)現(xiàn)處理幾十兆、幾百兆甚至幾GB都是沒有問題的

3.當(dāng)使用Excel進行復(fù)雜的計算時,會使用VBA,但是VBA本身是過時并且復(fù)雜的語言,Python是當(dāng)前最簡單且容易實現(xiàn)的一門語言,用Python能夠處理比VBA難度更高的業(yè)務(wù)邏輯

4.Python是通用語言,不僅可以處理Excel,使用Python就可以得到很多額外的功能,例如:爬蟲、發(fā)布網(wǎng)頁的Web服務(wù)、與數(shù)據(jù)庫進行連接、同時結(jié)合word和PPT進行處理、加入定時任務(wù)處理、人工智能分析等,各種額外的功能,這是Excel和VBA所不具備的

  • Python處理Excel主要有三大類庫

1.pandas:是Python領(lǐng)域非常重要的,用于數(shù)據(jù)分析和可視化的類庫,在處理Excel中,90%可以利用pandas類庫就可以搞掂,利用pandas就可以讀取Excel、處理Excel和輸出Excel,但是pandas也有缺點,就是無法做到格式類,例如Excel中合并單元、大量復(fù)雜的樣式(看起來很精美)的時候,用pandas無法搞掂,此時,依然是使用pandas結(jié)合openyxl、xlwings來搞掂需求

2.openpyxl:若電腦上未安裝office時,也可以使用openpyxl,這個類型可以運行在linux上,并且也可以實現(xiàn)操作大部分Excel格式和樣式的功能,使用它配合pandas,也可以完成大部分場景的需求

3.xlwings:比openyxl更加強大,只能運行在Windows或者Mac系統(tǒng),并且該系統(tǒng)中必須安裝了office才能運行,xlwings的原理,就是基于當(dāng)前系統(tǒng)已經(jīng)安裝好的office軟件,來進行功能的拓展來操作Excel

  • 使用pandas的時候,經(jīng)常會結(jié)合其他類庫,來完成更加復(fù)雜的功能

    • requests, bs4:可以完成爬蟲的功能

    • flask:可以做網(wǎng)頁,把表格展示在網(wǎng)頁上

    • Matplotlib:讀取表格后,進行可視化

    • sklearn:進行復(fù)雜的數(shù)據(jù)分析時,也可以結(jié)合機器學(xué)習(xí)Sklearn把讀取的Excel數(shù)據(jù),進行數(shù)據(jù)分析和機器學(xué)習(xí)

    • Python-docx:也可以結(jié)合Python-docx類庫,實現(xiàn)Excel和word的互通

    • smtplib:也可以使用smtplib,講Excel數(shù)據(jù)發(fā)送郵件出去

  • 開發(fā)環(huán)境

操作系統(tǒng):使用windows, mac都可以

Python版本:系統(tǒng)中需要安裝Python3.6以上的版本,Python2已經(jīng)過期不建議使用,Python3.6以前的版本功能相對弱,最好就是采用Python3.6以上的版本

開發(fā)工具:有兩個可以選擇,jupyter notebook,是個網(wǎng)頁編輯器,可以運行Python,常常用于交互性、探索性的開發(fā);pycharm,用于成熟腳本,或者web服務(wù)的一些開發(fā);這兩個工具可以隨意選擇。

二、用Python在Excel中查找并替換數(shù)據(jù)

技術(shù)工具:

Python版本:3.9

代碼編輯器:jupyter notebook

隨著項目的進展,需要經(jīng)常在Excel業(yè)務(wù)表格中查找及替換數(shù)據(jù),已保證數(shù)據(jù)與實際項目進度一致。手動一個一個查找,然后替換,效率太低,還容易遺漏。現(xiàn)在我們來試試用Python自動完成查找及替換吧。具體要求如下。

首先,我們先將左邊表格中的數(shù)據(jù)提取,并存入字典data,其鍵為“查找內(nèi)容”中的數(shù)據(jù),值為“替換內(nèi)容”中的數(shù)據(jù)。 

from openpyxl import load_workbook #用于讀取Excel中的信息
#獲取Excel表格中的數(shù)據(jù)
wb = load_workbook('查找替換.xlsx')#讀取工作簿
ws = wb.active #讀取活動工作表
data={} #新建字典,用于儲存數(shù)據(jù)
 
for row in range(2,ws.max_row+1):
    chazhao = str(ws['A' + str(row)].value)  #轉(zhuǎn)換成字符串,以免后續(xù)比對時出現(xiàn)數(shù)據(jù)類型沖突
    tihuan = str(ws['B' + str(row)].value) #轉(zhuǎn)換成字符串,以免后續(xù)比對時出現(xiàn)數(shù)據(jù)類型沖突
    data[chazhao]=tihuan #鍵值對應(yīng)存入字典
data

然后,讀取目標(biāo)表格,將D列中的所有數(shù)據(jù)提取出來,以便后續(xù)比對及替換。通過`for`循環(huán)遍歷“原表”,將D列每個單元格的值提取并存入`ID_list`。然后通過切片`ID_list[:10]`查看前10個數(shù)據(jù)是否OK。結(jié)果顯示相當(dāng)正常。

wb = load_workbook('原表.xlsx') #讀取目標(biāo)工作簿
ws = wb.active
ID_list = [] #新建一個列表,用于儲存原表D列的信息
for row in range(2,ws.max_row+1):
    ID = ws['D' + str(row)].value #遍歷整個工作表,將D列的數(shù)據(jù)逐個存入ID變量
    ID_list.append(ID) #將讀取到的結(jié)果存入列表
ID_list[:10] #查看列表中前10個數(shù)據(jù)

type("")

為了比對數(shù)據(jù),我們需要將`'說明碼:77601'`中的“說明碼:”字符拿掉,只保留“77601”。于是調(diào)用`split`函數(shù)來進行分割,并將分割好的數(shù)字部分存入新建的列表`code`。不好,居然報錯了,說`ID_list`列表中有"None"(空)類型的數(shù)據(jù),而"None"類型的數(shù)據(jù)是不能使用`split`函數(shù)的。目測了一下,`ID_list`列表中除了`'說明碼:77601'`和`''`這樣的空字符串,沒看到None啊。再回來“原表”偵察一下,發(fā)現(xiàn)最下面還有一些單元格很有嫌疑。原來是表尾有一些“供應(yīng)商”和倉位信息,這些信息所在位置對應(yīng)的D列都是空單元格,其值為"None"。用`ID_list[-10:]`查看最后10個元素,果然都是"None"。

code = [i.split(":")[-1] for i in ID_list]
code

ID_list[-10:]

這樣,我們就知道`ID_list`中有三種數(shù)據(jù),即含內(nèi)容的字符串(比如'說明碼:77601'),空字符串(比如'')和空值None。因此,需要修改一下字符串分割代碼如下。加入了`if`判斷語句,如果`ID_list`中的值是None,則放入None占位,以保持列表的值的順序與原表一致;值不是None,則按":"符號分割,并放分割后的最后一個值`[-1]`進入新列表code??兆址谶@里也要經(jīng)過`split`分割,但其中沒有“:”符號,所以就分割不了,只得直接跳過,最后放入新列表的還是空字符串。 

code = []
for i in ID_list:
    if i == None:# 如果是None,則放入None占位,以保持列表的值的順序與原表一致
        code.append(None)
    else:
        code.append(i.split(":")[-1]) #不是None,則按":"符號分割,并放分割后的最后一個值進入新列表code
code[:10]

處理完數(shù)據(jù)后,即可開始查找并替換目標(biāo)數(shù)據(jù)了。用`for`循環(huán)遍歷列表`code`,即原表D列中的數(shù)字部分。如果其中的值也存在于data的鍵中,即語句`if code[i] in data`,則將原表中D列(`column=4`)對應(yīng)的行中的數(shù)據(jù)改寫成新的值。新的值由兩部分組成,一部分是“說明碼:”這樣的,即`ID_list[i].split(":")[0]`,另一部分則是要替換的數(shù)字,即`data[code[i]]`。這樣保證只替換了需要替換的數(shù)字部分,而保留中文和冒號部分。最后保存為新的文件,替換完成。 

for i in range(len(code)):
    if code[i] in data:
        ws.cell(row=i+2,column=4).value = ID_list[i].split(":")[0] +":"+ data[code[i]]
wb.save('原表-替換.xlsx') 

如果以上不能通過觀察原表,發(fā)現(xiàn)空值問題,還可以用`enumerate`函數(shù)給列表里的所有元素加上索引,以便精確定位`ID_list`中的空值。加上索引后,在轉(zhuǎn)換成列表,并存入新的列表`ID_list_idx`中。觀察其中前10個數(shù)據(jù),可見索引已加好了。然后遍歷新列表,判斷其中的值是否為空值,若是則打印其對應(yīng)的索引編號,這樣就能精準(zhǔn)定位哪些是空值了,再回到原Excel表,就容易弄清楚發(fā)生了什么事啦。其中,新列表中的元素的結(jié)構(gòu)是一個元組,像這樣`(2, '說明碼:77601')`,`i[0]`是索引`2`,`i[1]`是索引對應(yīng)的值`說明碼:77601`。

ID_list_idx = list(enumerate(ID_list)) #加索引
ID_list_idx[:10]

for i in ID_list_idx: #遍歷列表
    if i[1] == None: #判斷索引對應(yīng)的值是否為空值。i的結(jié)構(gòu)是一個元組,像這樣(2, '說明碼:77601'),i[0]是索引,i[1]是索引對應(yīng)的值
        print(i[0]) #打印索引編號

以上就是用Python在Excel中實現(xiàn)自動查找并替換數(shù)據(jù)的詳細內(nèi)容,更多關(guān)于Python Excel查找并替換數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python入門教程之運算符與控制流

    Python入門教程之運算符與控制流

    本文主要針對 Python 的運算符和控制流進行講解,這里只介紹 Python 中比較獨特的部分,和其他語言類似的東西,比如加減乘除運算符就不在介紹。由于這篇文章是入門級別的文章,高手可直接跳過。
    2016-08-08
  • keras用auc做metrics以及早停實例

    keras用auc做metrics以及早停實例

    這篇文章主要介紹了keras用auc做metrics以及早停實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Python的logging模塊基本用法

    Python的logging模塊基本用法

    這篇文章主要介紹了Python的logging模塊基本用法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-12-12
  • python如何刪除文件中重復(fù)的字段

    python如何刪除文件中重復(fù)的字段

    這篇文章主要為大家詳細介紹了python如何刪除文件中重復(fù)的字段,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Python替換Excel表格中的空值或指定值的實現(xiàn)

    Python替換Excel表格中的空值或指定值的實現(xiàn)

    本文介紹了使用Python的pandas庫結(jié)合openpyxl來批量替換Excel表格中的空值或指定值,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-12-12
  • Python實現(xiàn)完整的事務(wù)操作示例

    Python實現(xiàn)完整的事務(wù)操作示例

    這篇文章主要介紹了Python實現(xiàn)完整的事務(wù)操作,結(jié)合實例形式分析了Python操作mysql數(shù)據(jù)庫相關(guān)事務(wù)操作的具體流程與實現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • Python腳本激活Linux密碼的方法(crypt模塊)

    Python腳本激活Linux密碼的方法(crypt模塊)

    今天小編給大家分享一個非常不錯的方法破解linux口令,主要是利用linux系統(tǒng)中的crypt模塊模擬了linux系統(tǒng)中用戶密碼的加密,操作也很方便,對python破解linux口令相關(guān)知識感興趣的朋友跟隨小編一起學(xué)習(xí)下吧
    2021-05-05
  • 詳解HttpRunner3的HTTP請是如何發(fā)出

    詳解HttpRunner3的HTTP請是如何發(fā)出

    這篇文章主要為大家介紹了HttpRunner3的HTTP請是如何發(fā)出詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Pygame淺析動畫精靈和碰撞檢測實現(xiàn)方法

    Pygame淺析動畫精靈和碰撞檢測實現(xiàn)方法

    這篇文章主要介紹了利用pygame完成動畫精靈和碰撞檢測,代碼詳細,內(nèi)容豐富,對于想要學(xué)習(xí)pygame的朋友來講是一個不錯的練習(xí),需要的朋友可以參考下
    2023-01-01
  • Python腳本實現(xiàn)格式化css文件

    Python腳本實現(xiàn)格式化css文件

    這篇文章主要介紹了Python腳本實現(xiàn)格式化css文件,本文直接給出實現(xiàn)代碼,實現(xiàn)把壓縮后的CSS文件轉(zhuǎn)換成正??勺x的CSS格式,需要的朋友可以參考下
    2015-04-04

最新評論