使用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
相关产品推荐
相关产品推荐

