Проверьте, соответствуют ли строки в кадре данных друг другу - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть фрейм данных с названиями городов в Марокко и еще один с похожими названиями, но он не был хорошо закодирован. Вот первый:

>>> df[['new_regiononame']].head()

    new_regiononame
0   Grand Casablanca-Settat
1   Fès-Meknès
2   Souss-Massa
3   Laayoune-Sakia El Hamra
4   Fès-Meknès

, а вот другой, который я хотел изменить на имена первого. По крайней мере, они знают, как правильно его прочитать:

>>>X_train[['S02Q03A_Region']].head()

    S02Q03A_Region
10918   Fès-Meknès
1892    Rabat-Salé-Kénitra
6671    Casablanca-Settat
4837    Marrakech-Safi
6767    Casablanca-Settat

Как проверить, соответствуют ли строки в кадре данных друг другу и, если да, переименовать строки X_train на df ?

Пока я знаю, как извлечь, какие строки в X_train имеют точные эквиваленты в df:

X_train['S02Q03A_Region'][X_train['S02Q03A_Region'].isin(df['new_regiononame'].unique())]

1 Ответ

1 голос
/ 13 февраля 2020

Здесь можно выполнить расстояние Левенштейна .

Расстояние Левенштейна дает вам расстояние между двумя словами, вычисляя количество единичных правок, необходимых для преобразования одного слова в другой. Вы могли бы установить sh разумный порог, сравнивая один столбец данных с другим, например:

  1. Если он начинается с того же символа (?)
  2. Если разница между длинами названия городов только x символов друг от друга?
  3. Если расстояние Левенштейна меньше y

et c. et c.

Код для расчета расстояния Левенштейна:

import nltk
nltk.edit_distance("Fès-Meknès", "Fès-Meknès")

Вывод:

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