获取字典/列表,并映射到具有x个匹配列的数据帧

时间:2017-12-05 17:31:48

标签: python pandas parsing

我有一个包含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'

返回已解析结果的两个选项,我计划使用哪个更容易添加到数据框:

  1. usaddress.parse(addr)解析方法会将您的地址字符串拆分为组件,和 标记每个组件。 (返回列表)
  2. usaddress.tag(addr)标记方法会尝试更聪明一点,它会合并连续的组件,删除逗号,&返回地址类型(返回有序列表)
  3. 使用此解析器的地址有26种不同的标签可用。

    但是,并非所有地址都包含所有这些标记。

    我需要获取每一行的完整地址,解析它,将解析后的结果映射到同一行中的每个匹配列。

    What the tag data looks like using from_records (index isn't exactly ideal)

    What the parse data looks like using from_records

    我无法弄清楚如何逐行计算和映射结果的逻辑。

2 个答案:

答案 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