Python 获取字典/列表,并映射到具有x个匹配列的数据帧
我有一个包含两列的表。Python 获取字典/列表,并映射到具有x个匹配列的数据帧,python,pandas,parsing,Python,Pandas,Parsing,我有一个包含两列的表。 我一直在探索使用地址解析,理想情况下,我希望解析地址,并将结果放入新的列中 import usaddress addr='123 Main St. Suite 100 Chicago, IL' 返回解析结果有两个选项,我计划使用更容易添加到数据帧的选项: usaddress.parse(addr)parse方法会将地址字符串拆分为多个组件,然后 标记每个组件。(退货清单) usaddress.tag(addr)tag方法将尝试变得更智能一点,它将合并连续的组件、带逗号
我一直在探索使用地址解析,理想情况下,我希望解析地址,并将结果放入新的列中
import usaddress
addr='123 Main St. Suite 100 Chicago, IL'
返回解析结果有两个选项,我计划使用更容易添加到数据帧的选项:
usaddress.parse(addr)
parse方法会将地址字符串拆分为多个组件,然后
标记每个组件。(退货清单)usaddress.tag(addr)
tag方法将尝试变得更智能一点,它将合并连续的组件、带逗号并返回地址类型(返回有序列表)我不太明白如何处理逐行计算和映射结果的逻辑 首先,从解析服务创建一列json响应
df['json_response'] = df['address'].apply(usaddress.pars)
接下来,将所有json组合成一个json字符串
json_combined = json.dumps(list(df['json_response']))
df_parsed = pd.io.json.json_normalize(json.loads(json_combined))
最后将组合的json解析为数据帧(解析json字符串后)
现在,您应该有一个包含所有必需列的结构化数据框架,您可以df。将与原始数据框架连接起来,以生成一个统一的数据集
请注意,根据返回的json的结构,您可能需要向`函数传递更多参数。链接页面上的示例是一个很好的起点。发布此解决方案的时间非常晚,但希望在其他人遇到相同问题时发布
地址csv文件标题:
name, address
进口:
import pandas as pd
import numpy as np
import json
import itertools
import usaddress
def address_func(address):
try:
return usaddress.tag(address)
except:
return [{'AddressConverstion':'Error'}]
# import file
file = pd.read_excel('addresses.xlsx')
# apply function
file['tag_response'] = file['Full Address'].apply(address_func)
# copy values to new column
file['tags'] = file.apply(lambda row: row['tag_response'][0], axis=1)
# dump json
tags_combined = json.dumps(list(file['tags']))
# create dataframe of parsed info
df_parsed = pd.io.json.json_normalize(json.loads(tags_combined))
# merge dataframes on index
merged = file.join(df_parsed)
谢谢你的回复!方向绝对正确。我在最后一行遇到了一个问题list object jas no attribute values
如果不查看实际输出,很难准确地知道发生了什么,但是函数usaddress.pars
似乎不是返回JSON,而是返回一个列表。您需要将列表对转换为具有类似于JSON的键值对结构的dict。查看此链接。
import pandas as pd
import numpy as np
import json
import itertools
import usaddress
def address_func(address):
try:
return usaddress.tag(address)
except:
return [{'AddressConverstion':'Error'}]
# import file
file = pd.read_excel('addresses.xlsx')
# apply function
file['tag_response'] = file['Full Address'].apply(address_func)
# copy values to new column
file['tags'] = file.apply(lambda row: row['tag_response'][0], axis=1)
# dump json
tags_combined = json.dumps(list(file['tags']))
# create dataframe of parsed info
df_parsed = pd.io.json.json_normalize(json.loads(tags_combined))
# merge dataframes on index
merged = file.join(df_parsed)