处理全量地址列时地理编码报Attribute Error的原因是什么?
解决地理编码时的AttributeError问题
问题原因
地址列虽标记为object类型,但实际包含float类型的空值(比如NaN)。前10行测试时刚好都是字符串格式的地址,所以无报错;整列处理时遇到NaN,地理编码函数内部调用encode方法时,float类型没有该属性,因此触发AttributeError: 'float' object has no attribute 'encode'。
解决方案
方案1:统一转换地址列类型并清理空值
先将所有地址转为字符串,再替换掉转成字符串的'nan':
import pandas as pd # 转换为字符串类型 df['address'] = df['address'].astype(str) # 替换字符串形式的空值为None df['address'] = df['address'].replace('nan', None) # 再执行地理编码 df['geo_address'] = df['address'].apply(geocode)
方案2:过滤空值后再处理
只对非空的地址行应用地理编码:
df['geo_address'] = df['address'].apply(lambda x: geocode(x) if pd.notna(x) else None)
方案3:增加类型校验的安全函数
自定义函数判断地址是否为有效字符串,再执行编码:
def safe_geocode(address): if isinstance(address, str) and address.strip(): return geocode(address) return None df['geo_address'] = df['address'].apply(safe_geocode)
内容的提问来源于stack exchange,提问作者Coder
相关产品推荐
相关产品推荐

