嗨,我正在处理一个有几列的csv文件。一个特殊的列是以下格式的address -
美国华盛顿州金县胡安尼塔东北115号10515号,邮编: 98033
我想拆分每个列基于(,),并创建新的相关列为每个像单位,街道,州,邮编等…
我可以根据(,)对它们进行拆分,现在每次拆分都有一列。
问题是这个数据不一致,拆分后得到的列总数是10列,但是数据的顺序不一样。一些记录如下所示-
美国华盛顿州金县西雅图西西雅图38号西南大道3008号,邮编: 98126
美国华盛顿州金县,东北130街23098号,三部曲,联合山-新奇山庄,邮编98053
美国华盛顿州金县,西雅图,华盛顿公园,Broadmoor,第32大道东32号消防局34号,邮编: 98112
基本上,并不是每条记录都包含这10种信息,而且顺序也不一定相同。
清理这类数据的最佳方法应该是什么?我想最终让数据根据它们所代表的内容放在相关的列中,比如如果城市列在城市列下,如果邮政编码移动到邮政编码列等等。
我使用的是Python 2.0。
希望得到一个好的解决方案。谢谢!
发布于 2017-10-14 21:07:35
我将使用库usaddress将地址分解为其组成部分。
https://usaddress.readthedocs.io/en/latest/
>>> import usaddress
>>> usaddress.tag('Robie House, 5757 South Woodlawn Avenue, Chicago, IL 60637')
(OrderedDict([
('BuildingName', 'Robie House'),
('AddressNumber', '5757'),
('StreetNamePreDirectional', 'South'),
('StreetName', 'Woodlawn'),
('StreetNamePostType', 'Avenue'),
('PlaceName', 'Chicago'),
('StateName', 'IL'),
('ZipCode', '60637')]),
'Street Address')
>>> usaddress.tag('State & Lake, Chicago')
(OrderedDict([
('StreetName', 'State'),
('IntersectionSeparator', '&'),
('SecondStreetName', 'Lake'),
('PlaceName', 'Chicago')]),
'Intersection')
>>> usaddress.tag('P.O. Box 123, Chicago, IL')
(OrderedDict([
('USPSBoxType', 'P.O. Box'),
('USPSBoxID', '123'),
('PlaceName', 'Chicago'),
('StateName', 'IL')]),
'PO Box')在那里,您可以查询返回的字典并将其放入pandas DataFrame中。
https://stackoverflow.com/questions/46744857
复制相似问题