You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用usaddress结合apply()提取街道并修改df的address_str列

使用usaddress结合pandas apply提取街道信息并修改DataFrame列

需求说明

从DataFrame的address_str列中提取纯街道部分(不含城市、州、邮编等内容),替换原列后得到仅保留街道信息的结果。

解决步骤

  1. 安装依赖库
    如果未安装usaddress,先执行安装命令:
pip install usaddress pandas
  1. 编写动态解析函数
    利用usaddress的地址解析能力,筛选出所有属于街道组成部分的字段标签,按原地址顺序拼接成完整街道字符串。适配场景的街道相关标签包括:AddressNumber、StreetName、StreetNamePreDirectional、StreetNamePostDirectional、StreetNameSuffix、SecondaryAddress、SecondaryAddressUnit(覆盖门牌号、街道名、方向词、后缀、单元/套房号等)。

  2. 批量处理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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 22:01:01