Отображение / архивирование между двумя фреймами данных Pandas с частичным совпадением строк - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть два кадра данных размером примерно 1 000 000 строк каждый. Оба имеют общий столбец «Адрес», который я использую для присоединения к фреймам данных. Используя это соединение, я хочу переместить информацию, которую я назову «деталями», из dataframe1 в dataframe2.

df2.details = df2.Address.map(dict(zip(df1.Address,df1.details)))

Однако столбец адреса не обладает всей общностью. Я попытался очистить как мог, но все еще могу перемещать только примерно 40% данных. Есть ли способ изменить мой код выше, чтобы обеспечить частичное совпадение? Я в полном замешательстве.

Данные довольно просты, как описано. Два небольших кадра данных. Изготовленный образец данных ниже:

df1 
Address                                    Details
Apt 15 A, Long Street, Fake town, US       A   


df2
Address                                    Details
15A, Long Street, Fake town, U.S.              

1 Ответ

0 голосов
/ 02 апреля 2019

Во-первых, я бы порекомендовал выполнить операцию join и определить строки в каждом фрейме данных, которые не имеют идеального соответствия. После того как вы определили эти строки, исключите другие и выполните следующие предложения:

  • Один из подходов состоит в том, чтобы проанализировать адреса и попытаться стандартизировать их. Вы можете попробовать использовать usaddress модуль для стандартизировать ваши адреса.

  • Вы также можете попробовать подходы, рекомендованные в ответе на this вопрос , хотя они могут занять некоторые настройки для вашего случая. Сложно сказать без нескольких примеров частичных совпадений строк.

  • Другой подход заключается в использовании API Карт Google (или Bing или MapQuest) для стандартизации адресов, хотя с более чем миллионом строк за каждый фрейм данных вы будете лишены бесплатных вызовов API / день и нужно будет оплатить услугу.

  • Последнее предложение - использовать fuzzywuzzy модуль нечеткого (приблизительного) сопоставления строк.

...