Python實(shí)現(xiàn)批量替換Excel中字符
一、問(wèn)題由來(lái)
聚會(huì)計(jì)劃一些菜品,現(xiàn)根據(jù)實(shí)際需要把B列中一些菜品更換一些,替換成C列中的菜品,最終結(jié)果寫(xiě)到E列當(dāng)中,如下圖效果所示。
問(wèn)題示意圖
二、解決辦法
本人經(jīng)過(guò)思考,考慮到這是一個(gè)批量替換的問(wèn)題,我們需要先找到更換的菜品,在原計(jì)劃菜品中定位,然后更換為新菜品,手工復(fù)制粘貼極其麻煩,這時(shí)可以考慮在WPS當(dāng)中使用substitutes進(jìn)行批量替換。在Excel中沒(méi)有stubstitutes這個(gè)函數(shù),可以考慮使用vlookup函數(shù)。
如果是在線表格,還可以在WPS當(dāng)中使用Python來(lái)解決這個(gè)問(wèn)題。
1. substitutes函數(shù)
其語(yǔ)法是substitutes(目標(biāo)數(shù)據(jù)列,原數(shù)據(jù)列,新數(shù)據(jù)列)
這是目標(biāo)數(shù)據(jù)列是A2:A19,原數(shù)據(jù)列是B2:B4, 新數(shù)據(jù)列是C2:C4。
我們可以在E2中輸入以下公式,回車即可:
=substitutes(A2:A19,B2:B4,C2:C4)
這種解法,思路清晰,操作簡(jiǎn)單,易不易記,推薦。當(dāng)然如果B2:B4和C2:C4不在當(dāng)前工作表,也可以跨表引用,這樣可以實(shí)現(xiàn)數(shù)據(jù)的跨表分離,適用于進(jìn)行大量數(shù)據(jù)的替換。
這里要注意的時(shí),替換的內(nèi)容不要重復(fù),否則就會(huì)容易適成混亂。
2. vlookup函數(shù)法
在Excel中沒(méi)有substitutes,只有substitute, 所以考慮可以使用iferror+vlookup的方法來(lái)解決這個(gè)問(wèn)題。
首先要明確:
- A列:聚會(huì)計(jì)劃菜單
- B列:原菜品
- C列:替換菜品
假設(shè)您希望在 E列 中輸出替換后的菜品,您可以使用以下公式:
=IFERROR(VLOOKUP(A2, B:C, 2, FALSE), A2)
公式解釋:
A2:聚會(huì)計(jì)劃菜單中的菜品(假設(shè)從 A2 開(kāi)始)。
B:C:包含原菜品和替換菜品的表格區(qū)域。
數(shù)字2表示我們要從 B 和 C 列的第二列(即“替換菜品”列)提取替換菜品。
FALSE:確保精確匹配原菜品。
IFERROR:如果沒(méi)有找到對(duì)應(yīng)的替換菜品,則返回原菜品(即 A2)。
E2填寫(xiě)完后,再選中右下角十字,雙擊填充即可。
3. 在線Python法
最新的wps在線文檔已經(jīng)支持調(diào)用Python代碼,我們可以使用以下代碼實(shí)現(xiàn)。由于在線文檔已經(jīng)把常用的模塊導(dǎo)入,所以我們不必導(dǎo)入pandas模塊,直接寫(xiě)代碼。
# 讀取 Excel 數(shù)據(jù) df = xl("$A$42:$A$59", headers=None, sheet_name="Sheet1") replacement_dict = {} for row in range(42, len(df)): original = df[row][1] # 假設(shè)原菜品在第二列(索引為1) replacement = df[row][2] # 假設(shè)替換菜品在第三列(索引為2) replacement_dict[original] = replacement # 初始化起始寫(xiě)入位置 start_row = 42 print(replacement_dict) for text in df[0]: # 假設(shè)聚會(huì)計(jì)劃菜單在第一列(索引為0) try: # 查找是否有對(duì)應(yīng)的替換菜品 if text in replacement_dict: new_text = replacement_dict[text] # 如果有替換菜品,使用替換菜品 else: new_text = text # 否則保持原菜品 write_xl(new_text,f"$E${start_row}",sheet_name="Sheet1") except Exception as e: # 發(fā)生錯(cuò)誤時(shí)寫(xiě)入“查無(wú)此詞” write_xl("查無(wú)此詞", f"$B${start_row}", sheet_name="Sheet1") start_row+=1
Python的思路時(shí),先讀取表格,建立一個(gè)新舊菜名的字典,然后遍歷A列,應(yīng)用字典,再寫(xiě)入到指定列即可。
其中xl()是在wps中讀取表的函數(shù),write_xl是寫(xiě)入表的函數(shù),這是與普通pandas模塊不一樣的。
4. 線下Python法
如果是線下python,就可以使用pandas模塊來(lái)解決這個(gè)問(wèn)題。通過(guò)讀取you_file.xlsx文件,然后創(chuàng)建字典,替換后生成update_menu.xlsx。這種方法適用于數(shù)據(jù)量多的情況。如果替換的文件比較多,可以考慮把字典內(nèi)容單獨(dú)放,這樣就變成了批量的讀取字典,替換Excel文件的功能了。
import pandas as pd # 讀取Excel文件中的數(shù)據(jù) df = pd.read_excel('your_file.xlsx', sheet_name='Sheet1') # 假設(shè)您的Excel中有3列:聚會(huì)計(jì)劃菜單、原菜品、替換菜品 # df.columns = ['聚會(huì)計(jì)劃菜單', '原菜品', '替換菜品'] # 創(chuàng)建一個(gè)字典來(lái)映射原菜品到替換菜品 replacement_dict = dict(zip(df['原菜品'], df['替換菜品'])) # 假設(shè)在聚會(huì)計(jì)劃菜單中需要替換的是原菜品 def replace_dishes(menu): # 如果菜單中的菜品在字典中找到,則替換為對(duì)應(yīng)的替換菜品 return replacement_dict.get(menu, menu) # 假設(shè)您的菜單數(shù)據(jù)存儲(chǔ)在 "聚會(huì)計(jì)劃菜單" 這一列 df['聚會(huì)計(jì)劃菜單'] = df['聚會(huì)計(jì)劃菜單'].apply(replace_dishes) # 將更新后的DataFrame保存到新的Excel文件 df.to_excel('updated_menu.xlsx', index=False, sheet_name='UpdatedSheet')
三、學(xué)后總結(jié)
1. 不同場(chǎng)景需要的不同的解決辦法,不同的方法各有優(yōu)劣。WPS中用substitutes, Excel中用vlookup,如果數(shù)據(jù)量較大,可以考慮用python。
2. 在數(shù)據(jù)量較少的情況下,wps的公式甚至比py執(zhí)行效率還高。但是如果是幾十個(gè)文件,替換的內(nèi)容成百上千時(shí),用線下的python代碼進(jìn)行替換就方便了。
3. 這是一個(gè)菜品替換小項(xiàng)目,如果換成翻譯中的術(shù)語(yǔ)替換,也可以采用同樣的操作,推薦使用substitutes,因?yàn)檫@個(gè)函數(shù)簡(jiǎn)單易于理解。
到此這篇關(guān)于Python實(shí)現(xiàn)批量替換Excel中字符的文章就介紹到這了,更多相關(guān)Python批量替換Excel字符內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
解決python2 繪圖title,xlabel,ylabel出現(xiàn)中文亂碼的問(wèn)題
今天小編就為大家分享一篇解決python2 繪圖title,xlabel,ylabel出現(xiàn)中文亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案
這篇文章主要介紹了詳解Python中的GIL(全局解釋器鎖)詳解及解決GIL的幾種方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01python里的單引號(hào)和雙引號(hào)的有什么作用
在本篇文章里小編給大家分享的是一篇關(guān)于python里的單引號(hào)和雙引號(hào)的作用的相關(guān)內(nèi)容,需要的朋友們可以學(xué)習(xí)下。2020-06-06一文教會(huì)你用Python獲取網(wǎng)頁(yè)指定內(nèi)容
Python用做數(shù)據(jù)處理還是相當(dāng)不錯(cuò)的,如果你想要做爬蟲(chóng),Python是很好的選擇,它有很多已經(jīng)寫(xiě)好的類包,只要調(diào)用即可完成很多復(fù)雜的功能,下面這篇文章主要給大家介紹了關(guān)于Python獲取網(wǎng)頁(yè)指定內(nèi)容的相關(guān)資料,需要的朋友可以參考下2022-03-03