您好我正在处理一个包含多个列的csv文件。一个特定的列是地址,其格式如下 -
10515,115th Place Northeast,Juanita,Kirkland,King County,Washington,98033,United States of America
我想基于(,)拆分每一列,并为每个列创建新的相关列,例如单位,街道,州,邮政编码等......
我能够根据(,)拆分它们,现在每个拆分都有一列。
问题是这个数据不一致,我在拆分后获得的总列数是10.但是数据的顺序不一样。有些记录如下 -
3008,38th Avenue Southwest,West Seattle,Seattle,King County,Washington,98126,United States of America
23098,Northeast 130th Street,Trilogy,Union Hill-Novelty Hill,Novelty,King County,Washington,98053,United States of America
消防局34,633,32 Avenue Avenue East,Broadmoor,Washington Park,Seattle,King County,Washington,98112,United States of America
基本上,并非每条记录都包含所有10种信息,并且不一定按相同的顺序排列。
清理此类数据的最佳方法是什么?我想最终根据它们所代表的内容将数据放入相关列中,例如,如果城市列在城市列下,如果邮政编码移动到邮政编码列等。
我正在使用Python 2.0。
希望得到一个好的解决方案。谢谢!
答案 0 :(得分:0)
我会使用库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中。