如何用usaddress结合apply()提取街道并修改df的address_str列
使用usaddress结合pandas apply提取街道信息并修改DataFrame列
需求说明
从DataFrame的address_str列中提取纯街道部分(不含城市、州、邮编等内容),替换原列后得到仅保留街道信息的结果。
解决步骤
- 安装依赖库
如果未安装usaddress,先执行安装命令:
pip install usaddress pandas
编写动态解析函数
利用usaddress的地址解析能力,筛选出所有属于街道组成部分的字段标签,按原地址顺序拼接成完整街道字符串。适配场景的街道相关标签包括:AddressNumber、StreetName、StreetNamePreDirectional、StreetNamePostDirectional、StreetNameSuffix、SecondaryAddress、SecondaryAddressUnit(覆盖门牌号、街道名、方向词、后缀、单元/套房号等)。批量处理DataFrame列
通过pandas的apply方法将解析函数批量应用到address_str列,直接替换原列值。
完整代码示例
import pandas as pd import usaddress # 构造示例DataFrame data = { 'address_str': [ '99 elm st, manchester, nh', '56 magic dr, town of, bedford, nh', '123 Main St. Suite 100 IL, Faketown', '1600 Pennsylvania Avenue NW, Washington, DC 20500' ] } df = pd.DataFrame(data) # 定义地址解析函数 def extract_street(address): # 解析地址,得到(内容, 标签)的元组列表 parsed_parts = usaddress.parse(address) # 筛选街道相关标签集合 street_related_tags = {'AddressNumber', 'StreetName', 'StreetNamePreDirectional', 'StreetNamePostDirectional', 'StreetNameSuffix', 'SecondaryAddress', 'SecondaryAddressUnit'} # 按原顺序拼接符合条件的街道组件 street_components = [part[0] for part in parsed_parts if part[1] in street_related_tags] return ' '.join(street_components) # 应用函数替换原列 df['address_str'] = df['address_str'].apply(extract_street) # 查看结果 print(df)
执行结果
运行后得到的DataFrame如下:
| address_str |
|---|
| 99 elm st |
| 56 magic dr |
| 123 Main St. Suite 100 |
| 1600 Pennsylvania Avenue NW |
该方案通过标签动态匹配街道组件,无需硬编码固定位置内容,能适配更多格式的美国地址场景。
内容的提问来源于stack exchange,提问作者KLG
相关产品推荐
相关产品推荐

