簡體   English   中英

通過pandas.DataFrame糾正字符串中的錯別字

[英]Correcting typos in string via pandas.DataFrame

我有一個龐大的失真數據列表,這些數據存儲在文本中,我需要進行一些爭論,但是卻無法弄清楚什么是最好,最有效的方法。 另一個需要考慮的因素是該數據非常龐大。 樣本量為160萬行,產量高達數千萬。

In [200]:data=['Bernard 51','Ber%nard Bachelor','BER78NARD$ bsc','BERnard$d B.']

In [201]:test=pd.DataFrame(data,columns=['Names'])

In [2020:test
Out[202]: 


  Names
0 Bernard 51
1 Ber%nard Bachelor
2 BER78NARD$ bsc
3 BERnard$d B.

我的目標是輸出

  Names
0 bernard
1 bernard ba
2 bernard ba
3 bernard ba

我的偽代碼將是這樣的:

In[222]:test_processed=pd.DataFrame(test.Names.str.lower()) #covert all str to lower

In[223]:test_processed
Out[223]: 


  Names
0 bernard 51
1 ber%nard bachelor
2 ber78nard$ bsc
3 bernard$d b.

In[224]:test_processed2=pd.DataFrame(test_processed.Names.str.replace('[^\w\s]',''))
#removes punctuation/symbol typos
In[225]:test_processed2
Out[225]: 


  Names
0 bernard 51
1 bernard bachelor
2 ber78nard bsc
3 bernardd b

In[226]:BA=['bachelor','bsc','b.'] #define list to be replaced with ba

In[227]:test_processed.replace(BA,'ba') #replace list defined above with standard term
Out[227]: 

  Names
0 bernard 51
1 ber%nard bachelor
2 ber78nard$ bsc
3 bernard$d b.

#no change, didn't work

我的觀察告訴我,如果將replace應用於Pandas DataFrame,則該替換不適用於該列表。

我之所以不使用test_processed2.Names.str.replace的原因是,DataFrame.str.replace不允許使用列表替換。

之所以使用列表,是因為我希望可以輕松維護列表,因為可能會出現越來越多的不同變量。如果您有使用Python或Pandas之外的解決方案或更好的選擇,我希望收到您的來信。

test_processed.replace(BA,'ba')將僅替換完全匹配項,而不替換部分條目。 也就是說,如果您輸入的內容之一是“ bachelor”,則可以很好地替換它。 對於部分字符串,您可以根據docs使用regex選項。

還有replace在字符串上工作。 因此,例如,如果您有一個列表data並且想要用“ ba”替換所有“ bsc”實例,那么您將執行以下操作:

data = [d.replace('bsc', 'ba') for d in data]

對於整個替換清單,您可以執行以下操作:

data = [d.replace(b, 'ba') for d in data for b in BA]

現在,雖然我覺得這正是您要問的問題,但我應該指出,這最終不是解決錯別字的正確方法。 假設您輸入了“ B.Bernard,msc”條目-您將替換“ B”。 與“ BA”,而這本不應該發生。 您的算法非常基礎,因此是錯誤的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM