-2

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";
4

1 に答える 1

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 ファイルの解析方法に関連しています。


そして、あなたがここで何をしようとしているのか、私にはよくわかりません:

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)

次に、値を解析する方法を再考する必要があります。pdb を呼び出したり、プリントアウトを追加したりすることを躊躇しないでください。

于 2016-03-10T16:59:55.103 に答える