如何在Pandas DataFrame中提取‘г.’与‘,’之间的内容?
提取Pandas地址列中「г.」与第一个「,」之间的内容
原始数据
用户的Pandas DataFrame地址列内容如下:
0 г. Санкт-Петербург, ул. Карпинского, 1 г. Челябинск, проспект Комсомольский, 2 г. Екатеринбург, ул. Щербакова, 3 г. Санкт-Петербург, ул. Латышских Стрелков, 4 г. Москва, вн.тер.г. муниципальный округ Измай...
需求
提取每行中「г.」和第一个「,」之间的内容,预期结果:
0 Санкт-Петербург 1 Челябинск 2 Екатеринбург 3 Санкт-Петербург 4 Москва
问题原因
你用的data['col'] = data['address'].str.extract('(г.*,)')不符合预期,是因为正则里的.*是贪婪匹配,会一直匹配到最后一个逗号前的所有内容,而非第一个逗号,导致结果包含多余字符。
正确解法
方法1:非贪婪正则匹配
使用非贪婪模式精准匹配到第一个逗号,同时排除「г.」本身:
data['col'] = data['address'].str.extract(r'г\.\s*(.*?)\,')
- 细节解释:
г\.:匹配「г.」,.是正则特殊字符,需加转义符\\s*:匹配「г.」后任意数量的空格(包括0个)(.*?):非贪婪匹配任意字符,直到碰到第一个逗号\,:匹配第一个逗号,转义避免与正则边界符混淆
方法2:字符串分割法
如果不想用正则,也可以用字符串分割实现:
data['col'] = data['address'].str.split(',', n=1).str[0].str.replace('г\. ', '')
- 细节解释:
str.split(',', n=1):按第一个逗号分割成两部分,取前半段str.replace('г\. ', ''):去掉开头的「г. 」(注意带空格)
两种方法都能精准提取到目标内容,不会受后续字符干扰。
内容的提问来源于stack exchange,提问作者alina999
相关产品推荐
相关产品推荐

