首页 > 解决方案 > 地址范围的 Pythonic 数据清理

问题描述

我需要知道是否可以通过 Python 完成以下任务。

我有一个包含 4,300 个地址的列表,每个地址都包含一系列地址,如下所示:

  1. 8519-21 S 百老汇
  2. 8700-6 河景大道
  3. 当归街 822-4 号
  4. 8442-6 N 百老汇

我想隔离范围内的第一个地址和最后一个地址。因此,以 1 为例,我需要输出给我 8519 S Broadway 和 8521 S Broadway,每个都在自己的行中。

在某些情况下,例如 1 和 3,我只需要第一个数字的前两位数字即可完成第二个地址。我尝试在 Excel 中使用文本到列 (-),然后使用 CONCATENATE 和 LEFT(cell,2),但是对于 2 和 4 等实例,我没有得到正确的地址,我需要地址的前三位。有没有办法编写一个python脚本来解决这个问题?

标签: pythondata-cleaning

解决方案


谢谢大家的帮助和建议。这就是我最终解决它的方式:

import re
import csv
from csv import DictReader

dash_add = []

def get_address_list(file):
    with open(file) as f:
        reader = csv.DictReader(f)
        for row in reader:
            adds = row['Siteaddr']
            if "-" in adds:
                dash_add.append(adds)

z = []

def get_formatted_address(address):
        numeric = address.split(" ")[0]
        text = address.replace(numeric, "").strip()
        start = numeric.split("-")[0]
        end = numeric.split("-")[1]
        end = start[:-len(end)] + end
        return [start + " " + text,  end + " " + text]

get_address_list('./data/map_data_112318.csv')
[z.extend(get_formatted_address(i)) for i in dash_add]

with open('formatted_addresses.csv', 'w') as csvfile:
    writer = csv.writer(csvfile)
    writer.writerow(['Address'])
    for v in z:
        writer.writerows([[v]])

推荐阅读