用 Python 進行資料清理
Adel Nehme
VP of AI Curriculum, DataCamp

將一個字串轉為另一個字串所需的最少步驟

將一個字串轉為另一個字串所需的最少步驟


目前的最小編輯距離:2

最小編輯距離:5

| 演算法 | 操作 |
|---|---|
| Damerau-Levenshtein | 插入、替換、刪除、換位 |
| Levenshtein | 插入、替換、刪除 |
| Hamming | 只有替換 |
| Jaro distance | 只有換位 |
| ... | ... |
可用套件:nltk、thefuzz、textdistance..
| 演算法 | 操作 |
|---|---|
| Damerau-Levenshtein | 插入、替換、刪除、換位 |
| Levenshtein | _插入_、_替換_、_刪除_ |
| Hamming | 只有替換 |
| Jaro distance | 只有換位 |
| ... | ... |
可用套件:thefuzz
# 讓我們比較兩個字串 from thefuzz import fuzz# 比較 reeding 與 reading fuzz.WRatio('Reeding', 'Reading')
86
# 局部字串比較
fuzz.WRatio('Houston Rockets', 'Rockets')
90
# 不同順序的局部字串比較
fuzz.WRatio('Houston Rockets vs Los Angeles Lakers', 'Lakers vs Rockets')
86
# 匯入 process
from thefuzz import process
# 定義字串與可能比對的陣列
string = "Houston Rockets vs Los Angeles Lakers"
choices = pd.Series(['Rockets vs Lakers', 'Lakers vs Rockets',
'Houson vs Los Angeles', 'Heat vs Bulls'])
process.extract(string, choices, limit = 2)
[('Rockets vs Lakers', 86, 0), ('Lakers vs Rockets', 86, 1)]
第 2 章
使用 .replace() 將 "eur" 合併為 "Europe"
如果變形太多怎麼辦?
"EU"、"eur"、"Europ"、"Europa"、"Erope"、"Evropa"...
字串相似度!
print(survey['state'].unique())
id state
0 California
1 Cali
2 Calefornia
3 Calefornie
4 Californie
5 Calfornia
6 Calefernia
7 New York
8 New York City
...
categories
state
0 California
1 New York
# 對每個正確的類別 for state in categories['state']:# 在有錯字的州名中找潛在相符 matches = process.extract(state, survey['state'], limit = survey.shape[0])# 逐一檢查潛在相符 for potential_match in matches: # 若相似度高 if potential_match[1] >= 80:# 用正確類別取代錯字 survey.loc[survey['state'] == potential_match[0], 'state'] = state

用 Python 進行資料清理