Нечеткое совпадение в одном столбце - Python - PullRequest
0 голосов
/ 29 мая 2020

Проблема: у меня есть записи в одном столбце, например. Буламбули и район Буламбули, по сути, одно и то же.

Решение: я пытался найти своего рода нечеткое совпадение в том же столбце и обнаружил - Pandas заменить строки нечетким совпадением в том же столбце :

import difflib 
import pandas as pd
df = pd.DataFrame({'district' : pd.Series(['Bulambuli', 'Kampla', 'Uttah' ,'Bulambuli district'])})
names = df['district']
def fuzzy_replace(x, names):
    aliases = difflib.get_close_matches(x, names)
    closest = pd.Series(aliases).mode()
    closest = aliases[0] if closest.empty else closest[0]
    df['district'].replace(aliases, closest, True)
df["district"].apply(lambda x: fuzzy_replace(x, df['district']))

Результат: enter image description here

Была ли у вас подобная проблема? Как вы посоветуете мне подойти к этому?

1 Ответ

0 голосов
/ 29 мая 2020

Ввод:

df = pd.DataFrame({'district' : pd.Series(['Bulambuli', 'Kampla', 'Uttah', 'Bulambuli district'])})
df
    district
0   Bulambuli
1   Kampla
2   Uttah
3   Bulambuli district

Просто возвращает ближайший:

def fuzzy_replace(x, names):
    aliases = difflib.get_close_matches(x, names)
    closest = pd.Series(aliases).mode()
    closest = aliases[0] if closest.empty else closest[0]
    return closest

df["district"].apply(lambda x: fuzzy_replace(x, df['district']))

Выход:

0    Bulambuli
1       Kampla
2        Uttah
3    Bulambuli

Строка Bulambuli возвращается функцией, поскольку это наиболее близкое значение к Bulambuli district в df.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...