Python實現(xiàn)批量替換Excel中字符
一、問題由來
聚會計劃一些菜品,現(xiàn)根據(jù)實際需要把B列中一些菜品更換一些,替換成C列中的菜品,最終結(jié)果寫到E列當中,如下圖效果所示。

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

