2016-03-10 58 views
-2

我試圖使用geopy通過使用從github下載的一些代碼進行地理編碼地址。 但錯誤的代碼是str obj不支持geocode_addresses address_dict["error"] = ""中的項目分配? 爲什麼我得到這個錯誤。下面是代碼。錯誤:'str'對象不支持python中的項目分配

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"; 
+1

請提供更多詳細信息,具體來說,是什麼*是*'address_dict'。據推測這是一個「字典」,但錯誤表明否則。 –

+2

'address_dict'似乎是一個'str' - 這意味着您需要查看代碼中調用geocode_addresses的位置,以找出爲什麼它是可迭代的字符串。 – mgilson

+0

你能提供一個示例數據集嗎? – zmo

回答

0

這看起來像下面的代碼片段address/df.ADDRESS

address = df.ADDRESS 
    geocoded = geocode_addresses(address) 

address是不是像你類型的字典列表正在期待它成爲:

for address_dict in address_dicts: 
    address_dict["error"] = "" 

測試代碼後,這裏就是address_dicts是:

(<class 'pandas.core.series.Series'> 

這基本上是一個字符串(pandas)名單:

(Pdb) address_dicts 
0 J6855, JALAN LMBAH KESANG 1/1-3,77378 MERLIMAU... 
Name: ADDRESS, dtype: object 
(Pdb) address_dicts[0] 
'J6855, JALAN LMBAH KESANG 1/1-3,77378 MERLIMAU, MELAKA;' 

所以你的問題涉及到如何」重新解析CSV文件。


和TBH,我真的不明白你在這裏做什麼:

with open(csv_file, 'rb') as csvfile: 
    for row in csvfile.readlines(): 
     df = pd.read_csv(csv_file) 

所以你打開文件,然後你遍歷文件,併爲每個你正在解析文件爲csv?


if __name__ == '__main__': 
    csv_file = 'nr-fixedNew.csv' 
    with open(csv_file, 'rb') as csvfile: 
      df = pd.read_csv(csv_file).to_dict() ### here you convert to dict 
      address = df['ADDRESS'] 
      geocoded = geocode_addresses(address) 
      write_csv(output_file, geocoded) 

,然後你需要重新考慮你解析值的方式。不要猶豫,撥打電話或添加打印輸出。

+0

即時嘗試打開文件,讀取每一行,並獲取地址字段傳遞給geocode_addresses。我不是熟悉Python,我不知道這兩個行是用於打開該文件 – ohlala

+0

原代碼最初是爲輸入文件僅具有地址在那裏。 – ohlala

+0

我收到新的錯誤。 geocode_addresses address_dict [ 「錯誤」] = 「」 類型錯誤: 'numpy.int64' 對象不支持的項目分配 – ohlala

相關問題