基于正则分割Pandas列时如何避免丢失匹配的数字内容
问题原因
你原来的代码存在两个问题:
- 正则开头多余的
.会额外匹配任意字符,匹配逻辑本身就不对 str.split会把匹配到的分隔符内容直接丢弃,你用,\s\d作为分隔符,拆分时会把「逗号+空格+数字」整个删掉,自然会丢失地址开头的数字。
解决方法
你可以用正向肯定预查来写分隔正则,预查规则只做匹配判断、不会消耗对应字符,也就不会把数字丢掉:
import pandas as pd data = {'Location': ['Building A, 100 First St City, State', 'Fire Station # 100, 2 Apple Row, City, State Zip', 'Church , 134 Baker Rd City, State']} df = pd.DataFrame(data) # 拆分逻辑:匹配逗号+空格,且后面紧跟数字,分隔符仅包含逗号+空格,不会消耗数字 df[['Location Name', 'Address']] = df['Location'].str.split(r',\s(?=\d)', expand=True) # 可选:去掉名称前后的多余空格(适配第三个示例里Church后面多出来的空格) df['Location Name'] = df['Location Name'].str.strip()
运行后得到的结果和你要求的目标输出完全一致。
你也可以用str.extract直接分组捕获两段内容,逻辑更直观不容易出错:
df[['Location Name', 'Address']] = df['Location'].str.extract(r'(.*?),\s(\d.*)') df['Location Name'] = df['Location Name'].str.strip()
内容的提问来源于stack exchange,提问作者pkpto39
相关产品推荐
相关产品推荐

