我是Python的新手,我一直在使用Google精简http://code.google.com/p/google-refine/和Excel的组合来清理凌乱的数据库,但是,我认为只要我能够获得,Python就可以做得更好我可以重复使用的一些“食谱”。
我的问题的一个变体是数据库的“位置”字段中的不一致。大约95%的数据具有List1列表中的格式,我可以使用python以比使用Excel过滤器更有效的方式处理这些格式。但是,我正在寻找一个python库或配方,允许我使用数据库中的所有类型的地理位置,可能是通过在列表中定义模式。
提前感谢您的帮助!
Location1=['Washington, DC','Miami, FL','New York, NY']
Location2=['Kaslo/Nelson area (Canada), BC','Plymouth (UK/England)', 'Mexico, DF - outskirts-, (Mexico),']
Location3=['38.206471, -111.165271']
# This works for about 95% of the data, basically US addresses on Location1 type of List
CityList=[loc.split(',',1)[0] for loc in Location1]
StateList=[loc.split(',',1)[1] for loc in Location1]
答案 0 :(得分:1)
不确定您是否仍然遇到此问题,但我认为这是一个对您有用的答案:
#location_regexes.py
import re
paren_pattern = re.compile(r"([^(]+, )?([^(]+?),? \(([^)]+)\)")
def parse_city_state(locations_list):
city_list = []
state_list = []
coordinate_pairs = []
for location in locations_list:
if '(' in location:
r = re.match(paren_pattern, location)
city_list.append(r.group(2))
state_list.append(r.group(3))
elif location[0].isdigit() or location[0] == '-':
coordinate_pairs.append(location.split(', '))
else:
city_list.append(location.split(', ', 1)[0])
state_list.append(location.split(', ', 1)[1])
return city_list, state_list, coordinate_pairs
#to demonstrate output
if __name__ == "__main__":
locations = ['Washington, DC', 'Miami, FL', 'New York, NY',
'Kaslo/Nelson area (Canada), BC', 'Plymouth (UK/England)',
'Mexico, DF - outskirts-, (Mexico),', '38.206471, -111.165271']
for parse_group in parse_city_state(locations):
print parse_group
输出:
$ python location_regexes.py
['Washington', 'Miami', 'New York', 'Kaslo/Nelson area', 'Plymouth', 'DF - outskirts-']
['DC', 'FL', 'NY', 'Canada', 'UK/England', 'Mexico']
[['38.206471', '-111.165271']]