Сопоставлять и сравнивать строки в Python Dataframe - PullRequest
0 голосов
/ 04 октября 2018

У меня есть 2 кадра данных.Можно получить значения, используя API текущих значений определенных полей в системе.Другой имеет текущие значения этих полей.Пример: имена в системе и имена на бумаге.Я объединил их в общем столбце, но сейчас пытаюсь сравнить имена на Python, чтобы увидеть, являются ли они приблизительным совпадением и / или нужно ли их обновить.Есть ли способ, которым я могу сделать это?Я считаю, что это может быть сделано в Excel с помощью isnumber (поиск (...)).

Не учитывает регистр и, возможно, учитывает сокращения (могу ли я составить словарь?) Для сравнения текстовых строк

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

<style type="text/css">
.tg  {border-collapse:collapse;border-spacing:0;}
.tg td{font-family:Arial, sans-serif;font-size:14px;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg th{font-family:Arial, sans-serif;font-size:14px;font-weight:normal;padding:10px 5px;border-style:solid;border-width:1px;overflow:hidden;word-break:normal;border-color:black;}
.tg .tg-0lax{text-align:left;vertical-align:top}
</style>
<table class="tg">
  <tr>
    <th class="tg-0lax"></th>
    <th class="tg-0lax">Name on System</th>
    <th class="tg-0lax">Current Name</th>
    <th class="tg-0lax">Match</th>
  </tr>
  <tr>
    <td class="tg-0lax">1</td>
    <td class="tg-0lax">APPLE INFORMATION TECHNOLOGY</td>
    <td class="tg-0lax">Apple International Information Technology </td>
    <td class="tg-0lax">No</td>
  </tr>
  <tr>
    <td class="tg-0lax">2</td>
    <td class="tg-0lax">IBM Intl group</td>
    <td class="tg-0lax">IBM International Group</td>
    <td class="tg-0lax">YES</td>
  </tr>
</table>

PS.Заранее извиняюсь, если я нарушил какие-либо правила или этикет сообщества Stack, я новичок в этом и открыт для изучения и конструктивной критики.

Ответы [ 2 ]

0 голосов
/ 04 октября 2018

Ну, вы можете узнать больше о разнице сходства строк здесь Найти метрику сходства между двумя строками

Я просто пытаюсь предоставить вам приложение, если вы хотите попробовать другой методиспользуя панд и ваши метрики.

import pandas as pd
from difflib import SequenceMatcher
df=pd.DataFrame({'Name on System':['APPLE INFORMATION TECHNOLOGY','IBM Intl group'],'Current Name':['Apple International Information Technology','IBM International Group']})

Определение вашей метрики в функции

def similiarity_ratio(row):
    return SequenceMatcher(None, row['Name on System'].lower(), row['Current Name'].lower()).ratio() 

df['Match']=df.apply(lambda x:similiarity_ratio(x),axis=1)
print(df)

Выход

Current Name                                    Name on System                 Match
0   Apple International Information Technology  APPLE INFORMATION TECHNOLOGY  0.800000
1   IBM International Group                     IBM Intl group                0.756757
0 голосов
/ 04 октября 2018

Может быть, хорошим способом было бы вычисление сходств и получение наибольшей вероятности совпадения?

Прежде всего вам необходимо выполнить некоторую очистку данных, например удалить специальные символы, преобразовать все строки в нижний регистр, а затем выполнить поиск с использованием сходства

st1 = 'apple information technology'
st2 = 'apple international information technology'

from difflib import SequenceMatcher
SequenceMatcher(None, st1, st2).ratio() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...