【问题标题】:How to only remove the house/building number from an address column using python [duplicate]如何使用python仅从地址列中删除房屋/建筑物编号[重复]
【发布时间】:2017-05-31 01:36:03
【问题描述】:

我的数据框中有一列地址。我想从字符串中删除门牌号并仅使用街道名称来制作树形图或文字云。 但是,有些地址有时在街道名称前有 3 位或更多位。此外,一些街道名称本身就有数字,所以我不能使用 %d 删除 str.split 或正则表达式中的数字。我最近开始学习python所以我不知道如何拆分这种字符串。任何帮助将不胜感激。

以下是列中给出的地址示例:
3150 N HONORE ST
139 E 103RD ST
412 E LOWER WACKER DR
东 94 街 300 号
10340 S AVENUE J
619 S KEDVALE AVE

【问题讨论】:

    标签: python regex split


    【解决方案1】:

    假设所有房屋地址中都没有空格,您可以将字符串除以第一个空格。使用示例:

    s="3150 N Honore St"
    new_s=s.split(" ",1)[1]
    

    打破这一点 - s.split(" ",1) 在第一个空格处拆分字符串,但只拆分一次。这将形成一个字符串列表,看起来像['3150','N Honore St']。由于您只想要后一部分,[1] 选择它。

    【讨论】:

      【解决方案2】:

      您可以使用正则表达式:^\d*\s

      https://regex101.com/r/B7DbxW/1

      【讨论】:

      • 如果我在字符串对象上使用它,它可以工作,但我如何让它在数据集或系列的列上工作? address = df["Street Address"] regex2 = r"^\d*\s" matches2 = re.finditer(regex2, address, re.MULTILINE) 当我运行 matches2 TypeError: expected string or buffer
      • 循环遍历每一行并解析字符串
      • 我尝试遍历行并将字符串添加到列表中,但它不起作用 l = [] for index, row in df.iterrows(): matches2 = re.finditer(regex2, row["Street Address"]) l.append(matches2) when I print l get in each instance 而不是街道名称字符串
      【解决方案3】:

      我刚开始使用 Python 中的正则表达式,但这是我的尝试:

      \d+\s[A-Z]\s+(.+)
      

      如果您想查看比赛,这里有一个快速链接:https://regex101.com/r/rzNgTL/1

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多