如何使用pandas.str.replace通过正则匹配结果替换整列街道名称数据
Pandas 街道名称字段正则提取实现方案
你要的效果可以通过捕获目标内容+全串替换的逻辑实现,核心是用正则匹配整个原字符串,仅保留你需要的捕获组内容,具体代码如下:
# 核心替换逻辑 df['street'] = df['street'].str.replace(r'^(\d+ +[a-zA-Z]{0,3}).*$', r'\1', regex=True)
正则说明
^匹配字符串起始位置(\d+ +[a-zA-Z]{0,3})是第一个捕获组,对应你要保留的内容:1个及以上数字 + 1个及以上空格 + 最多3个英文字母.*$匹配捕获组之后到字符串结尾的所有内容,这部分会被全部删除- 替换参数
\1代表取第一个捕获组的内容,直接把整个原字符串替换为目标内容
测试效果验证
你可以用测试数据确认效果:
import pandas as pd # 构造测试数据 test_df = pd.DataFrame({ 'raw_street': [ '3762 pearl street', '43 milford st.', '123 main avenue', '89 oak blvd.' ] }) test_df['processed_street'] = test_df['raw_street'].str.replace(r'^(\d+ +[a-zA-Z]{0,3}).*$', r'\1', regex=True) print(test_df)
处理后结果和你要求的完全匹配:
| raw_street | processed_street |
|---|---|
| 3762 pearl street | 3762 pea |
| 43 milford st. | 43 mil |
| 123 main avenue | 123 mai |
| 89 oak blvd. | 89 oak |
可选优化
如果你的数据里街道名称开头可能存在多余的前导空格,可以把正则调整为r'^\s*(\d+ +[a-zA-Z]{0,3}).*$',自动过滤开头的空白字符。
内容的提问来源于stack exchange,提问作者boog
相关产品推荐
相关产品推荐

