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

使用ez-address-parser解析地址遇AttributeError问题求助

问题解决:ez-address-parser 报 AttributeError: 'float' object has no attribute 'replace'

错误根源

ez-address-parser的parse方法仅支持字符串输入,但你的第二个CSV文件的ADDRESS列中存在float类型的值——大概率是缺失值(pandas默认用float类型的NaN表示空值),导致方法内部调用replace时出错。

排查步骤

先确认问题具体情况,运行以下代码:

# 查看ADDRESS列的数据类型
print(df1['ADDRESS'].dtype)
# 统计列中空值的数量
print(df1['ADDRESS'].isna().sum())
# 列出所有非字符串类型的行
non_str_records = df1[df1['ADDRESS'].apply(lambda x: not isinstance(x, str))]
print(non_str_records)

输出结果会直接告诉你是不是空值或者其他非字符串值导致的问题。

解决方法

方法1:过滤空值行(业务允许的情况下)

直接删除包含空地址的行,再执行解析:

# 复制原数据并删除空值行
df1_clean = df1.dropna(subset=['ADDRESS']).copy()
# 执行地址解析
df1_clean['Address_Parse'] = df1_clean['ADDRESS'].apply(ap.parse)

方法2:保留所有行,处理非字符串值

将列强制转为字符串,空值替换为空字符串,同时跳过空内容的解析:

# 把ADDRESS列转为字符串,NaN替换为空字符串
df1['ADDRESS'] = df1['ADDRESS'].astype(str).replace('nan', '')

# 自定义解析函数,跳过空地址
def parse_addr(addr):
    if addr.strip():
        return ap.parse(addr)
    return None  # 也可以返回空列表,根据需求调整

df1['Address_Parse'] = df1['ADDRESS'].apply(parse_addr)

方法3:读取CSV时提前指定类型

读取第二个文件时,强制ADDRESS列为字符串类型,从源头避免类型问题:

df1 = pd.read_csv(r'C:/Users/me/OneDrive/Documents/second_file.csv', encoding='latin-1', dtype={'ADDRESS': str})
# 之后再执行解析
df1['Address_Parse'] = df1['ADDRESS'].apply(ap.parse)

内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 05:20:32