我有一个包含2列的表。
Column 1 | Column 2
----------------------------
unique_number | '123 Main St. Suite 100 Chicago, IL'
我一直在使用https://parserator.datamade.us/api-docs探索地址解析,理想情况下要解析地址,并将结果放入新列中。
import usaddress
addr='123 Main St. Suite 100 Chicago, IL'
返回已解析结果的两个选项,我计划使用哪个更容易添加到数据框:
usaddress.parse(addr)
解析方法会将您的地址字符串拆分为组件,和
标记每个组件。 (返回列表)usaddress.tag(addr)
标记方法会尝试更聪明一点,它会合并连续的组件,删除逗号,&返回地址类型(返回有序列表)使用此解析器的地址有26种不同的标签可用。
但是,并非所有地址都包含所有这些标记。
我需要获取每一行的完整地址,解析它,将解析后的结果映射到同一行中的每个匹配列。
What the tag data looks like using from_records (index isn't exactly ideal)
What the parse data looks like using from_records
我无法弄清楚如何逐行计算和映射结果的逻辑。
答案 0 :(得分:1)
首先,从解析服务
创建一列json响应df['json_response'] = df['address'].apply(usaddress.pars)
接下来,将所有jsons组合成一个json字符串
json_combined = json.dumps(list(df['json_response']))
最后将组合的json解析为数据帧(解析json字符串后)
df_parsed = pd.io.json.json_normalize(json.loads(json_combined))
现在,您应该拥有一个包含所有必需列的结构化数据框,您可以df.join
使用原始数据框生成单个统一数据集。
只需注意,根据返回的json的结构,您可能需要将更多参数传递给`pandas.io.json.json_normalize函数。链接页面上的示例是一个很好的起点。
答案 1 :(得分:0)
发布此解决方案的时间已经很晚了,但希望以防万一其他人遇到同样的问题
地址csv文件标题:
$.post('functions/functions.php', {
fun: "code_generate",
string: code
}, function(data) {
if (data == "true") {
code = "asd";
console.log("hello world");
console.log(code);
}
});
进口:
name, address