如何根据内容将Pandas的address_1列拆分至指定多列?
Pandas拆分谷歌地图爬取的地址列解决方案
问题分析
你的地址列存在两种格式:
- 格式1:
100 Main Street, Atlanta, GA 30223(街道、城市、州+邮编) - 格式2:
100 Main Street, Suite 100, Atlanta, GA 30223(街道、地址补充信息、城市、州+邮编)
直接用简单字符串拆分报错是因为两种格式拆分后得到的元素长度不一致,无法直接匹配到目标列。下面是针对性的解决方法:
解决代码
import pandas as pd # 假设你的DataFrame名为df,已导入Excel数据 # 1. 从后往前按逗号分割2次,拆分出【地址前缀】、【城市】、【州+邮编】 split_parts = df['address_1'].str.rsplit(', ', 2, expand=True) df['city'] = split_parts[1].str.strip() # 2. 拆分州和邮编(利用州是2位大写字母、邮编是5位数字的规则) state_zip = split_parts[2].str.extract(r'^([A-Z]{2}) (\d{5})$', expand=True) df['state'] = state_zip[0] df['zip'] = state_zip[1] # 3. 拆分地址前缀为address_1和address_2 address_prefix = split_parts[0].str.split(', ', 1, expand=True) df['address_1'] = address_prefix[0].str.strip() # 若没有地址补充信息,address_2填充为空字符串 df['address_2'] = address_prefix[1].fillna('').str.strip()
代码说明
rsplit(', ', 2, expand=True):从字符串末尾开始按,分割2次,确保无论前面有多少个逗号,都能得到固定的3个部分(地址前缀、城市、州+邮编),避免长度不匹配的问题。- 正则提取州和邮编:利用谷歌地图地址的规则(州为2位大写字母,邮编为5位数字,两者间用空格分隔),用正则精准提取这两部分。
- 拆分地址前缀:将地址前缀按
,分割1次,若有补充信息则存入address_2,无则填空字符串。
内容的提问来源于stack exchange,提问作者HugoTheCat
相关产品推荐
相关产品推荐

