地址范围的Pythonic数据清除

时间:2018-11-25 03:13:09

标签: python data-cleaning

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

我有一个4,300个地址的列表,每个地址都覆盖一定范围的地址,如下所示:

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

我想隔离范围内的第一个地址和最后一个地址。因此,以1为例,我需要输出以分别给我8519 S Broadway和8521 S Broadway。

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

3 个答案:

答案 0 :(得分:0)

尝试以下代码:

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是您想要的数据。

答案 1 :(得分:0)

假设您的输入cat_cols = ['Pclass', 'Sex', 'Embarked'] df_train = pd.read_csv('train.csv') df_pred = pd.read_csv('test.csv') df_join = pd.concat([df_train[cat_cols], df_pred[cat_cols]]) df_join = df_join.fillna(df_join.mode, axis=0) df_join.Embarked.unique() 文件如下所示:

.csv

,您希望它看起来像这样:

Address
8519-21 S Broadway
8700-6 Riverview Blvd
822-4 Angelica St
8442-6 N Broadway

您可以使用csv模块来完成此操作:

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

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

答案 2 :(得分:0)

全部感谢您的帮助和建议。这就是我最终解决它的方式:

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]])