You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中使用正则表达式拆分字符串类型的地址列

拆分可变格式的地址DataFrame列

嘿,这个地址拆分的问题我之前也碰到过,关键是抓住地址的结构规律——不管街道名称有没有空格,最后三个部分都是独立的非空白元素(数字或字母)。下面给你一个靠谱的解决方案:

第一步:构造示例数据

先把你的测试DataFrame搭起来,我还加了第二种门牌号是数字的情况,方便验证:

import pandas as pd
import numpy as np

df = pd.DataFrame(index=np.arange(10))
# 混合两种地址格式
df["address"] = ["Iso Omena 8 a 2"]*5 + ["Iso Omena 8 5 2"]*5

第二步:用正则表达式提取拆分

我们用pandas的str.extract()方法,配合一个贪婪模式的正则,精准匹配街道名称和后面三个独立元素:

# 正则解析:捕获街道名称(所有内容直到最后三个元素),然后三个独立的非空白元素
address_pattern = r'^(.*)\s+(\S+)\s+(\S+)\s+(\S+)$'

# 提取并直接生成新列
df[["street_name", "building_number", "door_number_letter", "apartment_number"]] = df["address"].str.extract(address_pattern)

正则表达式解释

这个正则能完美适配你的两种场景,各部分含义:

  • ^(.*)\s+:贪婪匹配开头到倒数第四个元素前的所有内容,这样不管街道名称有多少个空格,都能完整抓出来
  • (\S+):匹配连续的非空白字符,正好对应建筑编号、门牌号/字母、公寓号(不管是数字还是字母都能匹配)
  • $:锚定字符串结尾,确保我们解析的是完整的地址

最终结果

运行后你的DataFrame会变成这样(截取部分行):

indexaddressstreet_namebuilding_numberdoor_number_letterapartment_number
0Iso Omena 8 a 2Iso Omena8a2
5Iso Omena 8 5 2Iso Omena852

如果之后遇到更复杂的地址变种(比如街道名称后面有更多元素),只需要微调正则里的捕获组数量就行,目前这个方案完全覆盖你提到的两个难点~

内容的提问来源于stack exchange,提问作者chessosapiens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:53:13