如何用Python将DataFrame中的单列地址拆分为多列?
Python 地址列拆分与清洗方案
核心思路
针对给定的地址格式,我们可以通过正则表达式精准匹配各字段特征,一次性提取所有目标列。该地址的结构规律如下:
- 名称:开头到第一个数字前的字符串
- 地址:数字开头到逗号前的字符串
- 行政区:逗号后到下一个数字前的字符串
- ID:连续8位数字
- 标签:包含斜杠的字母组合
- 地点:最后单个字母
代码实现
假设数据集存储在Pandas DataFrame中,列名为raw_address,处理代码如下:
import pandas as pd import re # 示例数据 data = { 'raw_address': ["EAGLE'S EYE SPORTS CLUB 5021 TOWNS ROAD, QUEENS 40560621 TS/A D"] } df = pd.DataFrame(data) # 定义正则匹配模式 pattern = r'^(.+?)\s(\d+.+?),\s(\w+)\s(\d{8})\s([A-Z]+/[A-Z])\s([A-Z])$' # 提取字段并生成新列 df[['Name', 'Address', 'Borough', 'ID', 'Tag', 'Place']] = df['raw_address'].str.extract(pattern) # 查看处理结果 print(df)
代码说明
pattern的各分组对应目标字段:(.+?):非贪婪匹配名称部分,直到遇到第一个空格加数字(\d+.+?):匹配以数字开头的地址内容,直到逗号(\w+):匹配全字母的行政区名称(\d{8}):精准匹配8位ID数字([A-Z]+/[A-Z]):匹配带斜杠的标签格式([A-Z]):匹配最后单个字母的地点标识
- 使用
str.extract()方法可直接将匹配结果映射为DataFrame的新列,无需手动拆分
注意事项
如果实际地址存在格式变体(比如名称含数字、ID位数不同等),需要根据具体场景调整正则表达式的匹配规则,确保覆盖所有情况。
内容的提问来源于stack exchange,提问作者Dsavy
相关产品推荐
相关产品推荐

