【发布时间】:2016-03-10 16:52:25
【问题描述】:
我正在尝试通过使用从 github 下载的一些代码来使用 geopy 对地址进行地理编码。
但是代码的错误是str obj不支持geocode_addresses address_dict["error"] = ""中的项目分配?
为什么我会收到这个错误。下面是代码。
if __name__ == '__main__':
csv_file = 'nr-fixedNew.csv'
with open(csv_file, 'rb') as csvfile:
for row in csvfile.readlines():
df = pd.read_csv(csv_file)
address = df.ADDRESS
geocoded = geocode_addresses(address)
write_csv(output_file, geocoded)
def geocode_addresses(address_dicts):
geocoder = geocoders.GoogleV3()
for address_dict in address_dicts:
address_dict["error"] = ""
try:
time.sleep(1)
address, (lat, lon) = geocoder.geocode(address_dict["fulladdress"])
address_dict["fulladdress"] = address
address_dict["latitude"] = lat
address_dict["longitude"] = lon
except ValueError as e:
address_dict["error"] = e
return address_dicts
数据集示例
SEX,PROGRAMME,ADDRESS
M,2,"J6855, JALAN LMBAH KESANG 1/1-3,77378 MERLIMAU, MELAKA";
【问题讨论】:
-
请提供更多细节,具体来说,是
address_dict。大概是dict,但错误提示并非如此。 -
address_dict似乎是str- 这意味着您需要查看调用geocode_addresses的代码,以找出为什么它是字符串的可迭代对象。 -
你能提供一个示例数据集吗?
-
@mgilson 编辑了问题
-
@AmiTavory --
s['bar']呼叫__getitem__,s['bar'] = ''呼叫__setitem__。因为str是不可变的,所以__setitem__无论你传入什么都会失败,所以没有理由去检查类型。对于int或long或适当的slice,__getitem__将成功,因此需要进行一些类型检查,并可用于帮助格式化错误消息。