我有从usaddress库获得的解析地址的数据:https://github.com/datamade/usaddress。
数据是元组列表。每个地址都有一个与其相关的列表:
[('Robie', 'BuildingName'),
('House,', 'BuildingName'),
('5757', 'AddressNumber'),
('South', 'StreetNamePreDirectional'),
('Woodlawn', 'StreetName'),
('Avenue,', 'StreetNamePostType'),
('Chicago,', 'PlaceName'),
('IL', 'StateName'),
('60637', 'ZipCode')]但是,对于某些地址,某个字段可能存在,也可能不存在。我想将这些数据导出到包含所有列标题( DataFrame,BuildingName,Address...ect)的熊猫栏中,如果该列标题不在列表中,则该单元格将保留为空白。
我现在拥有的是:
newAddr = []
for index, row in df.iterrows():
newAddr.append(usaddr.parse(row['FullAddress']))
df2 = DataFrame(newAddr)但是,这会生成一个没有列标题的文件,也没有一个真正的逐行组织,因为缺少的值只是将所有内容都移到了上面。
我们非常感谢你的帮助。
发布于 2018-09-10 21:34:18
假设如下:
usaddress.tagusaddress.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函数可以返回的所有列,所以您可以首先将列设置为这样(请参阅所有标记这里和API 这里):
cols = ['AddressNumberPrefix', 'AddressNumber', ...]我希望这能帮到你!要知道,当您使用字典执行pd.DataFrame并指定确切的列时,它将自动使用pd.NaN填充不存在的键。
https://stackoverflow.com/questions/52264065
复制相似问题