【问题标题】:Splitting pandas address into street and house numbers将 pandas 地址拆分为街道和门牌号
【发布时间】:2020-04-01 15:16:19
【问题描述】:

我有一个数据帧,其地址数据结构如下:

tbm_a['address']

Rue de blabla 20

Vossenstraat 7

Rue Père Jean 3 boite Z

Rue XSZFEFEF 331

我想将它分成一列与街道和一列与门牌号。

我尝试了这个 for 循环,但失败了:

import re
s = list(zip(tbm_a['address']))
for addr in s:
    tbm_a['street'] = re.findall('[^\d]*', addr)[0].strip()
    tbm_a['num'] = str(addr[len(street):].strip().split(' '))

然后我尝试了这个,并得到了号码:

tbm_a['address_num'] = tbm_a['address'].str.extract('(?P<number>\d+)', expand=True)

但我无法获得街道名称。有什么建议吗?

【问题讨论】:

  • 这可能比看起来更难(也许我错了)但是你将如何处理像Vossenstraat 7b 这样的事情? Rue Père Jean 3 boite Z 中的数字不是 3 boite Z 吗?门牌号码并不总是简单的数字。在3rd Ave appt. 1000-4 这样的东西上,简单地按数字分割可能会很棘手
  • 恐怕你确实是对的——但我不相信我能解释这一点

标签: regex string pandas


【解决方案1】:

根据您的数据,您可以:

df.address.str.extract('(?P<Street>\D+) (?P<Number>\d+.*)')

输出:

          Street     Number
0  Rue de blabla         20
1   Vossenstraat          7
2  Rue Père Jean  3 boite Z
3   Rue XSZFEFEF        331

请记住,如果您的街道名称中有数字,这将失败,例如5th avenue.

【讨论】:

  • 谢谢!确实是这样:)
猜你喜欢
  • 1970-01-01
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
  • 2019-08-25
  • 2015-06-20
  • 1970-01-01
相关资源
最近更新 更多