首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >地址范围的Pythonic数据清理

地址范围的Pythonic数据清理
EN

Stack Overflow用户
提问于 2018-11-25 03:13:09
回答 3查看 558关注 0票数 0

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

我有一个4300个地址的列表,每个地址涵盖一系列地址,如下所示:

  1. 百老汇8519-21 S
  2. 8700-6河景大道
  3. 安杰丽卡街822-4号
  4. 北百老汇8442-6

我想把第一个地址和最后一个地址分开。因此,以1为例,我需要输出给我8519 S百老汇和8521 S百老汇,每个都在自己的行列。

在某些情况下,比如1和3,我只需要第一个数字的前两位数就可以完成第二个地址。我尝试在Excel中使用文本到列(-),然后连接和离开(单元格,2),但是对于像2和4这样的实例,我没有得到正确的地址,因为我需要地址的前三位数。有任何方法可以编写python脚本来解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2018-11-25 03:28:04

试试下面的代码:

代码语言:javascript
复制
addresses=["8519-21 S Broadway","8700-6 Riverview Blvd"]
output=[]
for i in addresses:
    output.append(i[0:i.find('-')]+i[i.find(' '):])
    numEnd=i[i.find('-')+1:i.find(' ')]
    numStart=i[0:i.find('-')-len(numEnd)]+numEnd+i[i.find(' '):]
    output.append(numStart)
print(output)

其中,addresses是以您给定的格式列出的地址范围列表,而output是您想要的数据。

票数 0
EN

Stack Overflow用户

发布于 2018-11-25 04:33:01

假设您的输入.csv文件如下所示:

代码语言:javascript
复制
Address
8519-21 S Broadway
8700-6 Riverview Blvd
822-4 Angelica St
8442-6 N Broadway

你想让它看起来像这样

代码语言:javascript
复制
First Address,Last Address
8519 S Broadway,8521 S Broadway
8700 Riverview Blvd,8706 Riverview Blvd
822 Angelica St,824 Angelica St
8442 N Broadway,8446 N Broadway

您可以通过使用csv模块来实现这一点:

代码语言:javascript
复制
from csv import writer

# open both input and output csv
with open("addresses.csv") as csv_in, open("output.csv", "w", newline="") as csv_out:
    csv_writer = writer(csv_out)

    # Skip 'Address' header
    next(csv_in)

    # Write new headers
    csv_writer.writerow(["First Address", "Last Address"])

    # Go through each line in csv
    for line in csv_in:

        # Split ranges from rest of line
        ranges, *rest = line.split()

        # Split ranges themselves
        start, end = ranges.split("-")

        # Get difference between length of numbers
        diff = len(start) - len(end)

        # Create new end address
        end = start[:diff] + end

        # Write new lines to output csv
        csv_writer.writerow([" ".join([start, *rest]), " ".join([end, *rest])])

将您的结果输出到output.csv中。

票数 0
EN

Stack Overflow用户

发布于 2018-12-04 21:45:11

谢谢大家的帮助和建议。这就是我最后处理它的方式:

代码语言:javascript
复制
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]])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53464328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档