我有从usaddress python库https://github.com/datamade/usaddress中获得的解析地址中的数据
数据是元组列表的列表。每个地址都有一个与此相关的列表:
[('Robie', 'BuildingName'),
('House,', 'BuildingName'),
('5757', 'AddressNumber'),
('South', 'StreetNamePreDirectional'),
('Woodlawn', 'StreetName'),
('Avenue,', 'StreetNamePostType'),
('Chicago,', 'PlaceName'),
('IL', 'StateName'),
('60637', 'ZipCode')]
但是,对于某些地址,某些字段可能存在也可能不存在。我想将此数据导出到具有所有列标题(BuildingName,Address ... ect)的pandas DataFrame中,如果列表中不存在该列标题,则该单元格将保留为空白。
我目前所拥有的是:
newAddr = []
for index, row in df.iterrows():
newAddr.append(usaddr.parse(row['FullAddress']))
df2 = DataFrame(newAddr)
但是这会产生一个没有列标题并且没有按列进行实际组织的文件,因为缺少的值只会将所有内容移过来。
非常感谢您的帮助。
答案 0 :(得分:0)
假设以下内容:
usaddress.tag
usaddress.tag
可能引起的错误usaddress.tag
返回的第一部分然后,您可以执行以下操作
import usaddress
import pandas as pd
# your list of addresses dataframe
df = pd.read_csv('PATH_TO_ADDRESS_CSV')
# list of orderedDict
ordered_dicts = []
# loop through addresses and get respective information
for index, row in df.iterrows():
# here you should try/except for cases that fail
addr = usaddress.tag(row['FullAddress'])
# append to list
ordered_dicts.append(addr[0])
# **get all relevant keys in your list
cols = set().union(*(d.keys() for d in ordered_dicts))
# create new dataframe
df_new = pd.DataFrame(ordered_dicts, columns=cols)
df_new.to_csv('PATH_TO_DESIRED_CSV_ENDPOINT')
**
代表此功能部分的替代解决方案。因为我们完全知道.tag
函数可以返回的所有列,所以您可以一开始就这样设置这些列(请参见所有标签here和API here):
cols = ['AddressNumberPrefix', 'AddressNumber', ...]
我希望这会有所帮助!知道当您对字典进行pd.DataFrame
并指定确切的列时,它将自动用pd.NaN
填充不存在的键。