Pandas如何提取行内含KOTA/KAB的指定字符串并生成新列
实现方法
你原有代码的核心逻辑错误:
re.sub的作用是替换/删除匹配到的字符,和「提取指定片段存入新列」的需求完全相反- 逐行遍历pandas列的写法执行效率低,这类文本处理优先用pandas内置的向量化字符串操作
正确实现步骤
直接使用pandas的str.extract()方法,配合正则匹配目标规则,批量生成新列即可,不需要手写循环。
可直接运行的代码
import pandas as pd import re # 初始化测试数据集 testing = [['JL XXXX, KEC TAMBAKSARI KOTA SURABAYA 60135'], ['JL XXXX, KEC PORONG KAB SIDOARJO 61274'], ['DUSUN XXX, KEC SRONO KAB BANYUWANGI 68471']] df_test = pd.DataFrame(testing, columns=['A']) # 正则提取目标字段存入B列 # 正则规则说明:匹配独立单词KOTA/KAB + 空格 + 后续连续大写字母组成的地名 df_test['B'] = df_test['A'].str.extract(r'\b((?:KOTA|KAB) [A-Z]+)\b') print(df_test)
运行输出效果
A B 0 JL XXXX, KEC TAMBAKSARI KOTA SURABAYA 60135 KOTA SURABAYA 1 JL XXXX, KEC PORONG KAB SIDOARJO 61274 KAB SIDOARJO 2 DUSUN XXX, KEC SRONO KAB BANYUWANGI 68471 KAB BANYUWANGI
规则适配调整
如果后续遇到带空格的多段地名(比如KOTA BANDUNG SELATAN),可以把正则替换为r'\b((?:KOTA|KAB).*?)\s+\d{6}',逻辑为匹配KOTA/KAB开头的片段,直到遇到「空格+6位邮编」就终止匹配,兼容更复杂的地址格式。
内容的提问来源于stack exchange,提问作者MADFROST
相关产品推荐
相关产品推荐

