У меня есть адресные данные, которые я пытаюсь стандартизировать.
Сюда входят элементы очистки, такие как с Rd
по Road
и с Dr
по Drive
.
Однако я совершенно не понимаю, как отличить Street от Saint. Они оба имеют аббревиатуру St
.
Кто-нибудь делал что-то подобное раньше? Любые идеи, как обойти это?
Мой код на данный момент (адаптировано из здесь). Посмотрите st mary's road
в последней строке:
import re
import pandas as pd
# set up a df with fake addresses:
adds = pd.DataFrame({'address':['1 main st','2 garden dr.','4 foo apts','7 orchard gdns','st mary\'s road']})
print(adds)
address
0 1 main st
1 2 garden dr.
2 4 foo apts
3 7 orchard gdns
4 st mary's road
# set up a dictionary of names to change
def suffixDict():
return {'dr': 'drive',
'rd': 'road',
'st':'Street', # or 'st':'Saint' ??
'apts':'apartments',
'gdns':'gardens'}
# function to fix suffixes
def normalizeStreetSuffixes(inputValue):
abbv = suffixDict() # get dict
words = inputValue.split() # split address line
for i,word in enumerate(words):
w = word.lower() # lowercase
w = re.sub(r'[^\w\'\s]*','', w) # remove some special characters
rep = abbv[w] if w in abbv.keys() else words[i] # check dict
words[i] = (rep[0].upper() + rep[1:]) # proper case
return ' '.join(words) # return cleaned address line
# apply function to address data
adds.address.apply(normalizeStreetSuffixes)
0 1 Main Street
1 2 Garden Drive
2 4 Foo Apartments
3 7 Orchard Gardens
4 Street Mary's Road
Вы можете видеть, что улица Сент-Мэрис-Роуд была изменена на улицу Мэри-Роуд.
if
, чтобы посмотреть на первые два символа, а также на последние два символа, и выполнить такую замену. - person simplycoding   schedule 09.08.2019Garden Street Apartments
илиMain Street Lower
илиNorth Street Cottages
.... и я не думаю, что могу сказать, где именно в строке находитсяSt
. Т.к. я.split()
адрес, слова со словарем обрабатываются отдельно, то я.join
в конце. - person SCool   schedule 09.08.2019St
, он должен представлятьSaint
, верно? И можно ли предположить, что каждый второй экземплярSt
в адресе будетStreet
? - person simplycoding   schedule 09.08.2019